zoukankan      html  css  js  c++  java
  • wcf系列 binding的使用(1)


    文转自http://www.cnblogs.com/huangxincheng/archive/2011/10/23/2221845.html

    作为WCF速成系列,只介绍些项目开发中常用到的实战知识。

    学习wcf,还是对其中的几个术语要了解一下。wcf中有一个ABC的概念,就是

               第一: "A" 是地址,就是告诉别人我wcf在何处。

    第二: "B"是绑定,就是告诉别人应该走什么路才能过来。

    第三: "C"是契约:就是告诉别人我wcf这里有哪些东西。

    项目开发中常用到的三种绑定:

              第一:wsHttpBinding,  这个binding可以认为是webservice的加强版WSE,设计的目的就是用于异构系统的交互(比如java)。

              第二:netTcpBinding,   这个binding可以认为是remoting的加强版,设计的目的就是用于不同机器的.net 程序交互,

              第三: netMsmqBinding,  这个binding可以认为是msmq的加强版本,设计目的就是脱机环境下不同机器的.net程序交互,确保信息不丢失。

         

    下面对前二种binding的实际代码运用。

    第二步: 既然”C"已经出来了,那么她必须要有承载她的环境,也就是所谓的“宿主”。这里用console来承载。

                     新建console程序。

      第三步:现在服务处于预开启状态,为了让wcf更加灵活,更加容易控制,就要将相关配置写入到config里面。

                  在console类库中新建一个config文件,最后运行console程序正式启动。代码图如下:

        <!--定义客户端元数据类型-->
    <behaviors>
    <serviceBehaviors>
    <!--配置名称-->
    <behavior name="wsHttpBindingExample.MyserviceBehavior">
    <!--客户端是否支持HttpGet方式获取数据-->
    <serviceMetadata httpGetEnabled="true" />
    <!--客户端是否能捕获异常-->
    <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    </serviceBehaviors>
    </behaviors>
    <services>

    <!--数据配置-->
    <!--name就是服务名称,behaviorConfiguration:服务要暴露元数据 -->
    <service
    behaviorConfiguration="wsHttpBindingExample.MyserviceBehavior"
    name="wsHttpBindingExample.Myservice">

    <!--address:就是告诉wcf的地址是基地址baseAddresses,这个地方可以定义相对地址和决定地址-->
    <!--binding:该wcf走的协议是http协议wse-->
    <!--contract:就是契约内容-->
    <endpoint
    address=""
    binding="wsHttpBinding"
    contract="wsHttpBindingExample.IMyservice">
    <!--定义服务器类型-->
    <!--<identity>
    <dns value="localhost" />
    </identity>-->
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
    <baseAddresses>
    <!--二个用途:第一:这个地址用于给客户端作为服务引用的地址-->
    <!--二个用途;第二,做为endpoint的基地址存在-->
    <add baseAddress="http://localhost:8732/Design_Time_Addresses/wsHttpBindingExample/Myservice/" />
    </baseAddresses>
    </host>
    </service>
    </services>
    </system.serviceModel>
    </configuration>

    最后:  wcf已经开启,正在监视着address,然后我们就是先建一个console的Client程序,“引用”中“点击右键”添加服务引用。

    客户端应用代码:

         如果大家看懂了wsHttpBinding如何使用,那么改成netTcpBinding将会是轻而易举。 因为只要修改两个地方即可。

               第一:修改配置文件中的endpoint地址。

           为了配置大文件传输我们需要重新定义bindings

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <system.serviceModel>
    <!--定义客户端元数据类型-->
    <behaviors>
    <serviceBehaviors>
    <!--配置名称-->
    <behavior name="wsHttpBindingExample.MyserviceBehavior">
    <!--客户端是否支持HttpGet方式获取数据-->
    <serviceMetadata httpGetEnabled="false" />
    <!--客户端是否能捕获异常-->
    <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    </serviceBehaviors>
    </behaviors>
    <services>
    <!--数据配置-->
    <service
    behaviorConfiguration="wsHttpBindingExample.MyserviceBehavior"
    name="netTcpBindingExample.ManFly">

    <!--address:这个地址是绝对地址用的协议netTcp协议传输-->
    <!--binding:该wcf走的协议是netTcpBinding协议-->
    <!--contract:就是契约内容-->
    <endpoint
    address=""
    binding="netTcpBinding"
    contract="netTcpBindingExample.IFly"
    bindingConfiguration="netTcpBindConfig"
    />
    <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>

    <host>
    <baseAddresses>
    <!--二个用途:第一:这个地址用于给客户端作为服务引用的地址-->
    <!--二个用途;第二,做为endpoint的基地址存在-->
    <add baseAddress="net.tcp://localhost:8735/Design_Time_Addresses/netTcpBindingExample/ManFly/" />
    </baseAddresses>
    </host>

    </service>

    </services>

    <!--定义netTcpBinding协议为主-->
    <!--如果想传输大文件,下面几个配置也是必不可少的:

      maxBufferPoolSize="2147483647 "

      maxBufferSize="2147483647 "

      maxReceivedMessageSize="2147483647 "
    1、closeTimeout指定完成关闭操作提供的时间间隔、默认值为一分钟
    2、hostnameComparisonMode指定用于分析的Http主机名比较模式 默认值为StrongWildcard
    3、listenBacklog指定侦听器伤等待接受的最大通道数
    4、connectionTimeout 属性限制客户端在引发连接异常之前将等待连接的时间。默认值为 10
    5、maxBufferPoolSize一个整数,指定此绑定的最大缓冲池大小,默认是512*1024字节
    6、maxBufferSize正整数,指定内存中用于存储消息的存储区的最大大小(字节)
    如果 transferMode 属性等于 Buffered,则此属性应等于 maxReceivedMessageSize 属性值。
    如果 transferMode 属性等于 Streamed,则此属性不能大于 maxReceivedMessageSize 属性值,应当至少为标头的大小。
    默认值为 65536
    7、maxConnections整数指定服务将创建/接受的最大出站和入站连接数。传入和传出连接分别根据此属性指定的限制进行计数。默认值为10
    8、maxReceivedMessageSize正整数,指定采用此绑定配置的通道上可以接受的最大信息大小,包括信息头,如果消息超出此限制则发送方将收到 SOAP 错误。接收方将删除该消息,并在跟踪日志中创建事件项。默认值为 65536
    9、name一个包含绑定的配置名称的字符串。因为此值用作绑定的标识,所以它应该是唯一的。.net4.0;里面就没自动配置了
    10、openTimeout指定完成打开操作提供的时间间隔
    11、portSharingEnabled一个布尔值,指定是否为此连接启用 TCP 端口共享。如果此值为 false,则每个绑定都使用自己的独占端口。此设置只与服务相关,因为客户端不受影响。
    12、receiveTimeout一个 TimeSpan 值,指定为完成接收操作提供的时间间隔。此值应大于或等于 Zero。默认值为 00:10:00
    13、sendTimeout一个 TimeSpan 值,指定为完成发送操作提供的时间间隔。此值应大于或等于 Zero。默认值为 00:01:00
    14、transactionFlow一个布尔值,指定绑定是否支持流动 WS-Transactions。默认值为 false
    15、transactionProtocol指定与此绑定一起使用的事务处理协议。有效值为OleTransactions WSAtomicTransactionOctober2004 默认值为 OleTransactions。此属性的类型为 TransactionProtocol。
    16、transferMode一个 TransferMode 值,指定为请求或响应对消息进行缓冲处理还是流式处理。
    -->
    <bindings>
    <netTcpBinding>
    <binding
    name="netTcpBindConfig"
    closeTimeout="00:01:00"
    openTimeout="00:1:00"
    receiveTimeout="00:10:00"
    sendTimeout="00:01:00"
    transactionFlow="false"
    transferMode="Buffered"
    listenBacklog="10"
    maxBufferPoolSize="2147583647"
    maxBufferSize="2147483647"
    maxConnections="10"
    maxReceivedMessageSize="2147483647"
    >

    <readerQuotas maxDepth="32"
    maxStringContentLength="2147483647 "
    maxArrayLength="2147483647 "
    maxBytesPerRead="4096"
    maxNameTableCharCount="16384" />

    <reliableSession ordered="true"
    inactivityTimeout="00:10:00"
    enabled="false" />

    <security mode="Transport">
    <transport
    clientCredentialType="Windows"
    protectionLevel="EncryptAndSign" />
    </security>
    </binding>
    </netTcpBinding>
    </bindings>

    </system.serviceModel>
    </configuration>

    至此我已经安装此博友的第一篇文章进行了汇总

  • 相关阅读:
    MQTT协议的简单介绍和服务器的安装
    Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题
    gradle 命令
    git 命令学习
    PHP、JAVA、C#、Object-C 通用的DES加密
    JS中树形对象与数组之间的相互转换
    Javascript中的类型转换
    Javascript中的基本数据类型,如何判断数据类型,作用域链的理解
    前端面试题集锦(二)之CSS部分
    前端面试题集锦(一)之HTML部分
  • 原文地址:https://www.cnblogs.com/zhijianliutang/p/2248090.html
Copyright © 2011-2022 走看看