我正在创建一个wcf服务,我的wcf服务现在托管在一个控制台应用程序中,如下所示
PersonService = new ServiceHost(typeof(PersonService));
PersonService.AddServiceEndpoint(typeof(IPersonService), binding, "http://localhost:5645/PersonService");
PersonService.Open();
然后我使用ChannelFactory类消耗wcf服务;
EndpointAddress endPoint = new EndpointAddress("http://localhost:5645/PersonService");
ChannelFactory<IPersonService> engineFactory = new ChannelFactory<IPersonService>(binding, endPoint);
IPersonService personChannel = engineFactory.CreateChannel();
然后我可以使用此频道调用
等方法personChannel.GetPersonById("1");
personChannel.Close();
我的问题是:
如上面的代码所示,在完成工作后关闭通道时,服务始终打开。这是保持服务打开的良好行为,或者我应该打开服务然后在每次通话时关闭它,同时考虑到我可能有两个客户同时呼叫同一服务。
请告知。
答案 0 :(得分:5)
嗯,你的服务必须保持“开放” - 这是你的行话,但实际上“开放”调用会把听众放在端口上。服务器必须继续监听,以便知道客户端何时想要连接它。如果没有这个,客户端将不会与不是监听的服务器进行交谈。
当客户端完成并得到它想要的东西时,它可以终止(关闭)连接并消失,从而节省了双方的资源。
这就像拨打电话一样。有人必须坐在电话旁边“听”它才能响。客户拿起电话拨打服务热线。服务热线电话响了。那个人(正在“聆听”)拿起电话并开始“连接”(即对话)。
当客户端完成后,他/她将丢弃电话并且连接已结束。但是,服务热线的人必须继续“倾听”新的响铃。
答案 1 :(得分:1)
一般来说,它应该保持开放,否则会破坏旧的代理。
答案 2 :(得分:1)
WCF服务消耗很少的资源,并且运行50个WCF服务不是问题。但请分享它们之间的TCP端口(在您的情况下为5645
号码。)