WCF(一)

概念:跟WebService一样,都是为了实现不同平台不用应用程序之间的数据通信,但是WebService有一个缺点就是Web通信好使,局域网通信不太好使,一般局域网使用.Net Remoting这样的技术,所以微软推出了WCF  

一:第一个WebService

1.创建一个IBLL类库

2.类库里面创建一个IUserInfoService.cs,改成接口

3.引用System.ServiceModel

4.声明WCF特性标签

5.创建BLL类库,创建UseInfoService.cs,实现上面定义的接口

6.经过上面的步骤,服务代码已完成,接下来开始创建宿主(WCF服务必须寄宿在宿主上才能启动)

创建一个控制台Host,引用System.ServiceModel与接口IBLL,通过创建ServiceHost对象,也就是宿主,提供服务的主机来开启WCF服务

 

虽然报错显示是using()那里,但是实际是因为本例中BLL与IBLL分层了,不在同一命名空间下,尽管BLL引用了IBLL,但是不引入IBLL,App.config还是在终结点的contract服务契约这里报错

7.经过上面的步骤,完成了契约部分,接下来完成绑定和指定地址部分,也就是配置宿主的App.config配置文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    
    <services>
      <service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserInfoService"></endpoint>
      </service>

      <!--如果有多个契约,只需要在App.config配置文件中增加<service>节点-->
      <!--<service name="BLL.UserInfoService2" behaviorConfiguration="behaviorConfiguration">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserInfoService2"></endpoint>
      </service>-->
      
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorConfiguration">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

 

8.测试WCF服务是否已经起来,找到Host宿主生成的exe文件,如果在VS直接启动会报错,所以要以管理员身份运行

9.确定WCF服务已经正常开启后,在浏览器输入WCF地址:http://localhost:8000/ 就可以访问到WCF服务了

 10.服务端的服务已经构建好了,接下来模拟一个客户端,来访问WCF(使用微软的svcutil工具生成UserInfoService服务的客户端代理类,在WebService中,生成代理类只需要添加服务引用即可直接敲出来客户端代理类,我们也可以在WCF用WebService添加服务引用这种方式)

》1.首先创建一个控制台程序Client,找到Client的路径

》2.打开开发人员命令提示(注意:不是打开cmd

》3.切换到Client目录下,输入命令:svcutil http://localhost:8000/?wsdl /o:UserInfoServiceClient.cs

》4.回到项目里面,引入System.ServiceModel与IBLL,修改output.config与UserInfoServiceClient.cs文件

 

 

 

11.这些都配置好以后,接下来找到Client.exe,以管理员身份运行(注意:这里是不用重新编译Client,直接找到Client.exe运行

这样,利用WCF就实现两个应用程序之间的通信了

12.实际开发中,感觉用微软提供的这个:svcutil http://localhost:8000/?wsdl /o:UserInfoServiceClient.cs来生成客户端太麻烦了,经过测试完全可以用WebService添加服务引用来完成客户端代理类的生成

13.预绑定binding与baseAddress如何配置

 HTTP地址 
        即使用HTTP协议进行传输(包括https安全传输协议)。其地址形式为 
        http://localhost:8000/ 
        如果地址中为制定端口号,则默认端口为80

    TCP地址 
        使用TCP协议进行传输,其形式为: 
        net.tcp://localhost:8000/

    IPC地址 
        使用net.pipe进行传输,其形式为: 
        net.pipe://localhost/

    MSMQ地址 
        使用Microsoft Message Queue机制进行传输,其形式为: 
        net.msmq://localhost/

    对等网地址 
        使用net.p2p进行传输,其形式为: 
        net.p2p://localhost/

 

 

绑定 配置元素 说明 传输协议 编码格式
BasicHttpBinding <basicHttpBinding> 一个绑定,适用于与符合 WS-Basic Profile 的 Web 服务(例如基于 ASP.NET Web 服务 (ASMX) 的服务)进行的通信。 此绑定使用 HTTP 作为传输协议,并使用文本/XML 作为默认的消息编码。 HTTP/HTTPS Text,MTOM
WSHttpBinding <wsHttpBinding> 一个安全且可互操作的绑定,适合于非双工服务约定。 HTTP/HTTPS Text,MTOM
WS2007HttpBinding <ws2007HttpBinding> 一个安全且可互操作的绑定,可为 Security, ReliableSession 的正确版本和 TransactionFlow 绑定元素提供支持。 HTTP/HTTPS Text,MTOM
WSDualHttpBinding <wsDualHttpBinding> 一个安全且可互操作的绑定,适用于双工服务协定或通过 SOAP 媒介进行的通信。 HTTP Text,MTOM
WSFederationHttpBinding <wsFederationHttpBinding> 一个安全且可互操作的绑定,支持 WS 联合协议并使联合中的组织可以高效地对用户进行身份验证和授权。 HTTP/HTTPS Text,MTOM
WS2007FederationHttpBinding <ws2007FederationHttpBinding> 一个安全且可互操作的绑定,它派生自 WS2007HttpBinding 并支持联合安全性。 HTTP/HTTPS Text,MTOM
NetTcpBinding <netTcpBinding> 一个安全且经过优化的绑定,适用于 WCF 应用程序之间跨计算机的通信。 TCP Binary
NetNamedPipeBinding <netNamedPipeBinding> 一个安全、可靠且经过优化的绑定,适用于 WCF 应用程序之间计算机上的通信。 IPC Binary
NetMsmqBinding <netMsmqBinding> 一个排队绑定,适用于 WCF 应用程序之间跨计算机的通信。 MSMQ Binary
NetPeerTcpBinding <netPeerTcpBinding> 一个支持多计算机安全通信的绑定。 P2P Binary
MsmqIntegrationBinding <msmqIntegrationBinding> 一个绑定,适用于 WCF 应用程序和现有消息队列(也称为 MSMQ)应用程序之间跨计算机的通信。 MSMQ Binary
posted @ 2017-06-26 14:00  o李一波o  阅读(362)  评论(0编辑  收藏  举报