• 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
  • 相关阅读:
    让Dreamweaver支持cshtml (MVC Razor环境)
    href="#"与href="javascript:void(0)"的区别
    ASP.NET MVC 4 中Razor 视图中JS无法调试 (重要)
    03011_HttpServletRequest
    1004. 成绩排名 (20)
    1003. 我要通过!(20)
    C语言文件读写命令fprintf和fscanf
    1002. 写出这个数 (20)
    1001. 害死人不偿命的(3n+1)猜想 (15)
    汇编in和out实例解析
  • 原文地址:https://www.cnblogs.com/BOSET/p/7080239.html
Copyright © 2020-2023  润新知