【问题标题】:.NET Web Service Client Calls performance issue.NET Web 服务客户端调用性能问题
【发布时间】:2014-08-18 14:16:52
【问题描述】:

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

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

【问题讨论】:

标签: c# asp.net performance wcf


【解决方案1】:

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

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

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

【讨论】:

【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 2011-04-25
    • 2011-03-05
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2012-12-07
    相关资源
    最近更新 更多