WCF服务在大负载下响应非常慢

WCF服务在大负载下响应非常慢,wcf,Wcf,我有一个wcf服务,当我们对该服务进行40次模拟呼叫时,我们开始在客户机上看到很多时间。请参阅随附的wcf跟踪日志图片,按持续时间排序。服务和客户端位于同一台计算机上,使用标准tcp绑定 我们看到的错误是 1) 套接字连接已中止。这可能是由于处理消息时出错、远程主机超过接收超时或基础网络资源问题造成的。本地套接字超时为“10675199.02:48:05.4775807”。 2) System.IO.PipeException,System.ServiceModel,版本=4.0.0.0,区域性

我有一个wcf服务,当我们对该服务进行40次模拟呼叫时,我们开始在客户机上看到很多时间。请参阅随附的wcf跟踪日志图片,按持续时间排序。服务和客户端位于同一台计算机上,使用标准tcp绑定

我们看到的错误是

1) 套接字连接已中止。这可能是由于处理消息时出错、远程主机超过接收超时或基础网络资源问题造成的。本地套接字超时为“10675199.02:48:05.4775807”。 2) System.IO.PipeException,System.ServiceModel,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089 写入管道时出错:管道正在关闭。(232,0xe8)

关于进一步测试的更新

看起来只有当服务做了一些工作时才会发生这种情况,如果我注释掉我在服务中所做的工作,它需要相同的1000/分钟的请求,没有问题

客户端与服务器有40个活动连接

即使使用示例应用程序,我也会看到相同的错误。我在服务器上做了如下工作

public double Add(double n1, double n2) {
    for (int i = 0; i < 1000000; i++)
    {
        Trace.WriteLine("this is a test");
    }
    return n1 + n2;
}
public双加(双n1,双n2){
对于(int i=0;i<1000000;i++)
{
Trace.WriteLine(“这是一个测试”);
}
返回n1+n2;
}
并在客户端上执行以下操作

 Action<string> a = CallService5000TimesInLoop;

         for (int i = 0; i < 30; i++)
         {
             a.BeginInvoke("Url",null,null);
         }
动作a=CallService5000TimesInLoop;
对于(int i=0;i<30;i++)
{
a、 BeginInvoke(“Url”,null,null);
}

请选择红线以获取异常详细信息。对于超时问题没有答案,但除非您使用
netTcpBinding
,否则请尝试使用常规的
wsHttpBinding
或更新的
netHttpBinding
(如果您关心网络带宽)。由于HTTP是无会话的,因此它在负载下通常比面向连接的TCP传输具有更好的可扩展性。是的,HTTP在幕后依赖TCP,但它不会试图维护客户端和服务之间的“连接”,这是可能导致超时的原因之一。请检查您是否处于缓冲模式。。。