Silverlight调用WCF服务
System.ServiceModel命名空间赋予了Silverlight对各种Web服务器的访问能力,这其中包括WebService和WCF,Silverlight通过.NET的Webservice和WCF服务可以完成很多Silverlight自身功能以外的事情。
我们常在Silverlight中调用WCF返回某类型数据集合或执行某种数据相关操作,这些集合的类型要求是WCF支持的可序列化的数据类型。
WCF几乎集合了由.NET Framework所提供的所有通信方法。通信双方的沟通方式由合约来订定。通信双方所遵循的通信方法,由协议来订定,通信期间的安全性,由双方约定的安全性层次来定义。
WCF的基本概念是以合约(Contract)来定义双方沟通的协议。
合约必须要以接口的方式来体现。而实际的服务代码必须由
这些合约接口派生并实现,合约分成了四种:
1.数据合约(Data Contract):订定双方沟通时的数据格式。
2.服务合约(Service Contract):订定服务的定义。
3.操作合约(Operation Contract):订定服务提供的方法。
4.消息合约(Message Contract):订定在通信期间改写消息内容的规范。
协议绑定 (Binding)
由于 WCF 支持了 HTTP,TCP,Named Pipe,MSMQ,Peer-To-Peer TCP 等协议,而 HTTP 又分为基本 HTTP 支持 (BasicHttpBinding) 以及 WS-HTTP 支持 (WsHttpBinding),而 TCP 亦支持 NetTcpBinding,NetPeerTcpBinding 等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。
一个设置通信协议绑定的示例如下:
<!-- 设定服务系结的资讯 -->
<services>
<service name=" CalculatorService" >
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1" contract="ICalculator" />
</service>
</services>
<!-- 设定通讯协定系结的资讯 -->
<bindings>
<wsHttpBinding>
<binding name="Binding1">
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
客户端
对于 WCF 的客户端来说,WCF 服务就像是一个 Web Service 一样,在 Visual Studio 2008 中,所有 WCF 服务的连接都是由客户端的 服务代理(WCF Service Proxy) 来运行,开发人员不用花费太多心思在通信上,而 WCF Service Proxy 在 Visual Studio 中被称为服务引用(Service Reference)。在 Visual Studio 中加入 WCF 的服务引用时,Visual Studio 会自动帮开发人员做掉一些必要工作(例如组态创建以及产生 Service Proxy 等),开发人员只需要在代码中取用 WCF Service Proxy 对象即可。
每一个 WCF 服务都会关系到地址(Address)、绑定(Binding)和契约(Contract),而 WCF 则通过 Endpoint 将 ABC 三个方面联系在一起。每一个 Endpoint 都必须包括 ABC 三个方面,缺一不可,而 host 进程会提供WCF Endpoint供客户端调用。每个 Endpoint 都对应一个唯一地址,但是多个 Endpoint 可以共享相同的绑定和契约,每个服务又可以提供多个 Endpoint 供客户端掉用。