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

C# .NET Web服务客户端调用性能问题,c#,asp.net,performance,wcf,C#,Asp.net,Performance,Wcf,我有一个ASP.NETMVC应用程序正在调用WCF服务。下面是我如何处理每一个请求 var xml = "my xml string"; var ep = new EndpointAddress("http://myendpoint"); xml = new Proxy.ServiceClient(new NetTcpBinding(), ep).getNewXML(new Proxy.CallContext(), xml); 我遇到的问题是请求的数量,而不是回收 请参阅下面使用性能监视器的屏

我有一个ASP.NETMVC应用程序正在调用WCF服务。下面是我如何处理每一个请求

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键(每个请求都会执行表单post,然后尝试调用代理客户端)来运行此测试


此时,web浏览器只是旋转,直到实例开始下降。这通常需要30秒左右,但在服务器上执行大量活动时会导致问题。如何防止它达到100%?

客户端代理类是一次性的-实现IDisposable,因为连接是一种应尽快释放的资源。在代码中,您似乎没有在使用后处理代理对象。进行客户端调用的常见代码模式如下所示

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

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

您应该在使用完代理后立即关闭它。对于一次性WCF客户端代理,不建议使用
using
语句,因为它们的
Dispose()
方法可能会引发异常。有关详细信息,请参阅

这样就足够了:

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;
}

你打什么服务?是会期吗?单身汉?我怎么知道?我可以进入服务器服务配置设置…这里有人有一个类似的问题:你的建议违背了WCF最佳实践。原因是客户端代理类上的
Dispose()
可能引发异常。这是不建议使用
的例外情况之一。at的“避免使用语句的问题”是一种解决方法,而不是最佳实践,它针对的是长期存在的WCF缺陷。请检查找出MSDN解决方案背后的问题,以及“更好”的解决方案/解决方案。“尝试/抓住”方法是最佳实践。当然有,但它们也要付出自己的代码篡改成本。