概念汇总
我希望从本章的这个小节你能对面向服务有个清晰的认识。接下来的一些章 节,让我们看看这些概念根本上如何在WCF系统里工作的。在我们的例子里,我 讲构建一个简单的接受客户订单的订单处理服务。为了保证概念的简洁明了,这 里有2个消息参与者,如图2-3所示。
图2-3:一个简单的消息交换示例
这个示例代码的作用就是加强你对面向服务的认识和提供WCF的介绍,不会详 细描述WCF的方方面面或者建立一个完整功能的订单处理系统。例子里的类型和 机制会在这本书将会详细介绍。
契约
显然地,面向服务系统开发首先应该是创建契约。为了例子简单,一个订单 包含一个产品ID(product ID)、数量(quantity)和状态消息(status message)。有了这三个字段,一个订单可以使用下面的伪schema代码表示:
<Order>
<ProdID>xs:integer</ProdID>
<Qty>xs:integer</Qty>
<Status>xs:string</Status>
</Order>
从我们消息自治和配置地址的讨论,我们知道消息需要更多的地址结构,如 果我们想使用WS-Addressing。在我们的订单处理服务里,消息发送者和接收者 统一使用遵守WS-Addressing规范的SOAP消息来限制消息的结构。有了这个规则 ,下面就是一个结构合理的消息例子:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap- envelope" xmlns:wsa="http://
schemas.xmlsoap.org/ws/2004/08/addressing">
<s:Header>
<wsa:Action s:mustUnderstand="1">urn:SubmitOrder</wsa:Action>
<wsa:MessageID>4</wsa:MessageID>
<wsa:ReplyTo>
<wsa:Address> http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
</wsa:Address>
</wsa:ReplyTo>
<wsa:To s:mustUnderstand="1">http://localhost:8000/Order</wsa:To>
</s:Header>
<s:Body>
<Order>
<ProdID>6</ProdID>
<Qty>6</Qty>
<Status>order placed</Status>
</Order>
</s:Body>
</s:Envelope>