2012-10-19 53 views
2

当涉及到WCF代理时,我总是遵循try/Close/catch/Abort的指导。我现在正面临一个代码库,它在MVC控制器中创建代理,并让它们超出范围。我认为我们需要编辑代码库来使用try/Close/catch/Abort,但存在阻力。关闭WCF代理

有没有人知道我可以捕捉到的一个指标(例如perfmon)来说明问题/好处。或者说明问题/好处的明确参考,没有人可以争论?

+2

您还需要争辩说,你不应该在控制器中创建WCF代理。 – ChrisBint

+0

ChrisBint:你反对在控制器中创建代理服务器? – JohnC

+2

@JohnC给出这个关于将代理交互包装为合适的try/catch/abort的性质,它将不可避免地结束一段相当大的代码,理想情况下它将放置在另一个位置并从Controller调用。这不是真的反对,更多的建议。 – ChrisBint

回答

1

您可以创建一个示例应用程序来模拟该问题。虽然我还没有试过,你可以试试这个,

  1. 创建一个简单的服务,并限制maxConcurrentCallsmaxConcurrentSessions到5

  2. 创建一个客户端应用程序,并在这,调用服务方法,无需关闭连接。

  3. 火了6级或更多的客户

  4. 见当您打开来自客户端的新的连接会发生什么。客户可能会等待一定的时间,你会得到一些例外。

如果客户没有正确关闭连接,该连接将仍停留在服务开放的,所以如果连接的客户端的1000到服务的时间和离开自己的连接打开会发生什么?该服务有一个限制,即它可以一次服务于'n'连接,并且由于该服务无法处理来自客户端的任何新请求,这就是关闭连接非常重要的原因。

我想你知道WCF服务中的using问题。在我的应用程序中,我使用如thread中所述的扩展方法关闭WCF连接。

0

您是否在服务器和客户端都尝试了命令提示符下的简单'netstat -N'? Yoy可能会看到很多等待/挂起的连接,这可能会无故耗尽您的服务器资源。

+0

我会检查出来,看看 – user195166