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
浙公网安备 33010602011771号