WCF绑定方式

常用:HttpBind, NetTcpBind

服务端

<system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="BindConfig">
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="CalculatorServiceBehavior" name="WCFHost.TrayService">
        <endpoint address="net.tcp://192.168.10.121:10051/TrayService" binding="netTcpBinding" contract="WCFHost.ITray" bindingConfiguration="BindConfig" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://192.168.10.121:10050/TrayService" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

看上去很繁琐,其实关键点就几个:绑定方式,地址,服务的类、接口名

可以不用配置文件,用代码实现以上配置文件的功能

ServiceHost serviceHost = null;
                Uri baseAddress = new Uri("http://192.168.10.121:10050/TrayService");

                serviceHost = new ServiceHost(typeof(TrayService), baseAddress);
                serviceHost.AddServiceEndpoint(typeof(ITray), new NetTcpBinding(SecurityMode.None), "net.tcp://192.168.10.121:10051/TrayService");

                ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
                behavior.HttpGetEnabled = true;

                serviceHost.Description.Behaviors.Add(behavior);

                serviceHost.Open();
                Console.WriteLine("WCF BTS 服务启动成功");

注意http和tcp两种绑定方式的端口不同

 

客户端

最简单的办法添加服务引用,自动生成代理和配置,就是生成的东西看上去繁琐,且上线更新服务地址时,需要重新更新引用(直接改配置似乎不行)

推荐以下方法:

用SvcUtil生成代理类,简单干净,不包括任何服务地址的信息,配置文件更简单,使用WCF Test Client测试服务时会生成客户端配置的样例,可直接用这个。

    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_ITray" sendTimeout="00:05:00">
                    <security mode="None" />
                </binding>
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://192.168.10.121:10051/TrayService"
                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ITray"
                contract="ITray" name="NetTcpBinding_ITray" />
        </client>
    </system.serviceModel>

这样实例化代理类时无需参数,自动读配置。也可以不用XML配置文件,直接用代码实现,即实例化代理类时传入绑定方式和地址即可

new TrayClient(new BasicHttpBinding(), new EndpointAddress("http://192.168.10.121:10050/TrayService"));

如果服务端提供了tcp绑定,则客户端使用tcp绑定方式调用

如果服务端只有http绑定,则客户端使用http绑定方式调用

 

绑定方式参考:

http://www.cnblogs.com/zhijianliutang/archive/2011/11/27/2265212.html

http://www.cnblogs.com/yf2011/p/5390748.html

posted @ 2018-04-25 10:33  chy710  阅读(42)  评论(0)    收藏  举报