.NET Web服务客户端调用性能问题

时间:2014-08-18 14:16:53

标签: c# asp.net performance wcf

我有一个调用WCF服务的ASP.NET MVC应用程序。以下是我每次请求时的调用方式。

var xml = "my xml string";
var ep = new EndpointAddress("http://myendpoint");
xml = new Proxy.ServiceClient(new NetTcpBinding(), ep).getNewXML(new Proxy.CallContext(), xml);

我遇到的问题是请求数量而不是回收。

使用性能监视器查看下面的屏幕截图。我通过在服务器上打开Web浏览器并按住enter(每个请求执行表单发布然后尝试调用代理客户端)来运行此测试。

enter image description here

此时,Web浏览器只是旋转,直到实例开始丢弃。这通常需要大约30秒,但在服务器上执行大量活动时会导致问题。我该怎么做才能防止它达到100%?

2 个答案:

答案 0 :(得分:2)

客户端代理类是一次性的 - 具有IDisposable,因为连接是应该尽快处理的资源。在您的代码中,您似乎没有在使用后处置代理对象。进行客户端调用的常见代码模式是这样的。

using (var proxy= new MyProxyClass(...))
{
   proxy.DoSomething(...);
}

客户端资源泄漏可能会导致客户端和服务器端出现严重的性能问题。由于您的MVC应用程序(Web服务代理)是WCF服务的客户端,因此对整体性能的损害正在升级。

答案 1 :(得分:2)

您应该在完成使用后立即关闭代理。在一次性WCF客户端代理的情况下,不建议使用using语句,因为他们的Dispose()方法可能会抛出异常。有关详细信息,请参阅here

这样的东西就足够了:

var client = new MyServiceClient();
try
{
    client.Open();
    client.MyServiceCall();
    client.Close();
}
catch (CommunicationException e)
{
    ...
    client.Abort();
}
catch (TimeoutException e)
{
    ...
    client.Abort();
}
catch (Exception e)
{
    ...
    client.Abort();
    throw;
}
相关问题