WCF如何绑定netTcpBinding寄宿到控制台应用程序详解
契约
新建一个世界商会联合会服务类库项目,在其中添加两个世界商会联合会服务:游戏服务,游戏服务
代码如下:
[服务合同]公共接口IGameService {[操作合同]TaskString DoWork(字符串参数);}公共类游戏服务: IGameService{公共异步Taskstring DoWork(字符串参数){返回等待任务.FromResult($ "你好{arg},我是游戏服务。");} }[服务合同]公共接口iplayer服务{[操作合同]TaskString DoWork(字符串参数);}公共类player ServiCe : iplayer ServiCe { 0公共异步Taskstring DoWork(字符串参数){返回等待任务.FromResult($'Hello {arg},我是PlayerService。);}}服务端
新建一个控制台应用程序,添加一个类ServiceHostManager
公共接口IServiceHostManager : IDisposable { void Start();void Stop();}公共类service hostmanagerservice : iServiCeHostManager,其中t服务:类{ service host _ hostpublic service host manager(){ _ host=新服务主机(类型为(t service));_主机。打开=(s,a)=}控制台。写线(‘WCF监听已启动!"{0}",主机。描述。端点[0]。地址);};_主机。关闭=(s,a)=}控制台。写线(‘WCF服务已终止!"{0}",主机。描述。端点[0]。名称);};}公共void Start() {控制台.WriteLine(“”正在开启世界商会联合会服务."{0}",主机。描述。端点[0]。名称);_主机open();} public void Stop() { if (_host!=null _主机状态==通信状态.已打开){控制台WriteLine(“”正在关闭世界商会联合会服务."{0}",主机。描述。端点[0]。名称);_主机close();} } public void Dispose(){ Stop();}公共静态任务开始新(cancelTokenSource cancelTokenSource){ var theTask=Task .工厂。start new(()={ IServiceHostManager SHS=null;请尝试{ SHS=new ServiceHostManagerServiCe();嘘start();while(true){ if(cancelTokenSource .IsCancellationRequested shs!=null) { shs .stop();打破;} } } catch(异常例如){控制台.WriteLine(例如);if (shs!=null) shs .stop();} },cancelTokenSource .令牌);返回任务;}}在主要的方法中启动世界商会联合会主机
类程序{静态程序(){控制台WriteLine(“”初始化.');控制台WriteLine(“”服务运行期间,请不要关闭窗口。');控制台WriteLine();}静态void Main(字符串[]参数){控制台.标题='WCF '主机x64 .(按[Esc]键停止服务)';var cancelTokenSource=new cancellatitoken source();服务主机管理合同.服务。游戏服务。startnew(cancelTokenSource);服务主机管理合同.服务。球员服务。startnew(cancelTokenSource);while (true) { if (Console .ReadKey().Key==ConsoleKey .escape){ 0控制台WriteLine();cancelTokenSource .取消();打破;} }控制台ReadLine();} }服务端配置
在控制台应用程序的App.config中配置system.serviceModel
system.serviceModel服务服务名称='Wettery .WcfContract。服务。游戏服务'行为配置='游戏元数据行为'端点地址=' net。TCP ://localhost 336019998/Wettery/GameService ' binding=' netcpbinding ' contract=' Wettery .WcfContract。服务。igameservice '绑定配置=' netTcpBindingConfig '标识十进位计数制值=' localhost '/identity/endpoint/服务服务名称='Wettery .WcfContract。服务。玩家服务'行为配置=' playerMetadataBehavior '端点地址=' net。TCP ://localhost :19998/Wettery/players服务' binding=' netTcpBinding '合约=' Wettery .WcfContract。服务。iplayer服务'绑定配置=' netTcpBindingConfig '标识十进位计数制值='localhost' /标识/端点/服务/服务绑定netTcpBinding绑定绑定名称=' netcpbinding config ' closetime out=' 00:00 ' open time out=' 00:30:00 '接收超时=' 003:00 '发送超时=' 00:000 '未避免元数据泄露,部署时将HttpGetEnable设为错误的
运行控制台应用程序
按[电子稳定控制]键终止服务
客户端测试
服务端运行后,用测试客户端工具测试,服务地址即行为中配置的元数据得到地址
http://localhost :8081/Wettery/GameServiCe/METADATA
http://localhost :8081/Wettery/Player ServiCe/METADATA
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。
版权声明:WCF如何绑定netTcpBinding寄宿到控制台应用程序详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。