WCF服务应该始终保持打开状态吗?

时间:2011-03-23 10:49:54

标签: .net wcf wcf-client

我正在创建一个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();

我的问题是:

如上面的代码所示,在完成工作后关闭通道时,服务始终打开。这是保持服务打开的良好行为,或者我应该打开服务然后在每次通话时关闭它,同时考虑到我可能有两个客户同时呼叫同一服务。

请告知。

3 个答案:

答案 0 :(得分:5)

嗯,你的服务必须保持“开放” - 这是你的行话,但实际上“开放”调用会把听众放在端口上。服务器必须继续监听,以便知道客户端何时想要连接它。如果没有这个,客户端将不会与不是监听的服务器进行交谈。

当客户端完成并得到它想要的东西时,它可以终止(关闭)连接并消失,从而节省了双方的资源。

这就像拨打电话一样。有人必须坐在电话旁边“听”它才能响。客户拿起电话拨打服务热线。服务热线电话响了。那个人(正在“聆听”)拿起电话并开始“连接”(即对话)。

当客户端完成后,他/她将丢弃电话并且连接已结束。但是,服务热线的人必须继续“倾听”新的响铃。

答案 1 :(得分:1)

一般来说,它应该保持开放,否则会破坏旧的代理。

答案 2 :(得分:1)

WCF服务消耗很少的资源,并且运行50个WCF服务不是问题。但请分享它们之间的TCP端口(在您的情况下为5645号码。)