Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF&;keepAliveEnabled-同时有两个以上的插座?_C#_Multithreading_Wcf_Keep Alive - Fatal编程技术网

C# WCF&;keepAliveEnabled-同时有两个以上的插座?

C# WCF&;keepAliveEnabled-同时有两个以上的插座?,c#,multithreading,wcf,keep-alive,C#,Multithreading,Wcf,Keep Alive,为了测试服务器的响应时间,我尝试创建一个多线程请求程序 我的服务器是一个WCF Web服务,我的客户端有一个对此Web服务的服务引用 WCF尊重HTTP规范,我在许多网站上看到默认情况下WCF是保持活动的。只有来自同一客户机的两个连接被同时授权 因此,当我尝试创建100个线程时,其中只有两个线程同时在处理。因此,在几个循环之后,很多线程都处于超时状态 我试着看完这篇文章:但没用 这是我的应用程序配置(由服务引用修改): 我尝试在appCode中使用customBinding,如本文所示: 但

为了测试服务器的响应时间,我尝试创建一个多线程请求程序

我的服务器是一个WCF Web服务,我的客户端有一个对此Web服务的服务引用

WCF尊重HTTP规范,我在许多网站上看到默认情况下WCF是保持活动的。只有来自同一客户机的两个连接被同时授权

因此,当我尝试创建100个线程时,其中只有两个线程同时在处理。因此,在几个循环之后,很多线程都处于超时状态

我试着看完这篇文章:但没用

这是我的应用程序配置(由服务引用修改):


我尝试在appCode中使用customBinding,如本文所示: 但是,当我执行软件时,会出现一个关于“application/xml”的错误。如果我尝试用英语翻译,可能会出现类似“您的客户机不管理应用程序/xml消息”的情况

我需要做实时事务,如果WCF只能同时管理两个套接字,我就不能

你能帮我吗

PS:我可以发布我客户的代码,但我不确定是否有用,因为我知道问题是套接字限制


解决方案(thnaks to Spender):在代码的开头,更改System.Net.ServicePointManager.DefaultConnectionLimit中的默认值(它是2)。这不是由默认的.Net对单个主机的HTTP请求限制引起的吗?这是因为默认值为2

在内部发出HTTP请求时,将创建一个
ServicePoint
实例来管理与特定主机的连接。向同一主机发出新请求,它将使用同一ServicePoint实例进行连接管理

可以使用以下代码操纵单个主机的限制:

var serviceUri = new Uri("http://xxx.xxx.xxx.xxx:xxx/SabIn.svc");
var servicePoint = System.Net.ServicePointManager.FindServicePoint(serviceUri);
servicePoint.ConnectionLimit = int.MaxValue;

我相信您也可以,但我不确定您是否可以调整与单个ServicePoint相关的限制。

谢谢您的帮助。我是否从服务器、客户端或两者都进行了修改?@BaptX:这将是一个客户端设置。我将在明天早上(这里是晚上8点)测试它。我会在几个小时内回答;)我不确定WCF是否使用ServicePointManager。。。如何检索?解决方案是更改System.Net.ServicePointManager.DefaultConnectionLimit中的值-这是一个误解-谢谢:)
var serviceUri = new Uri("http://xxx.xxx.xxx.xxx:xxx/SabIn.svc");
var servicePoint = System.Net.ServicePointManager.FindServicePoint(serviceUri);
servicePoint.ConnectionLimit = int.MaxValue;