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 支持了 HTTPTCP,Named Pipe,MSMQ,Peer-To-Peer TCP 等协议,而 HTTP 又分为基本 HTTP 支持 (BasicHttpBinding) 以及 WS-HTTP 支持 (WsHttpBinding),而 TCP 亦支持 NetTcpBinding,NetPeerTcpBinding 等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。

 一个设置通信协议绑定的示例如下:

   <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
   <system.serviceModel>

  <!-- 设定服务系结的资讯 -->

  <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 供客户端掉用。

posted @ 2012-12-20 10:12  息晴海  阅读(1140)  评论(0编辑  收藏  举报