我浏览了互联网并堆叠溢出的答案,但我似乎无法对我的问题得到明确答案。
我有大约50个客户遍布全国各地,每隔10-20分钟,通过Windows服务自动定时打开一个WCF WSHTTPBinding调用。这很有效,因为我限制了可以通过服务器连接并执行长时间运行操作的客户端数量,然后客户端知道它无法执行任何操作并在下次重新登录时尝试。
直到昨天,一个在同一路由器后面有7个独立系统的客户端开始出现非常慢的互联网问题,这一直运作良好。因此,这7个系统每10-20分钟就会打开一个与服务器的连接,并执行“登记”程序。这些呼叫需要一段时间,并且每个系统可以使用与服务器的7个连接立即连接到服务。其他43个系统也需要每10-20分钟“办理登机手续”。但是由于拥有7个系统的客户端网络速度较慢,因此对服务器上长时间运行的进程的调用时间比正常情况要长,最终会在客户端上超时(有时甚至会出现过时的安全时间戳错误)。作为回报,这有时会挂起WCF服务以响应任何其他客户端请求,然后最终客户端将超时,服务器连接将清理并处理其他请求。
我需要我的服务完全不受客户端互联网问题的影响,并且服务需要继续为继续“登记”的其他客户提供服务。
现在,我已经在服务端实现了服务限制行为:
Dim stb As New ServiceThrottlingBehavior
stb.MaxConcurrentSessions = 100
stb.MaxConcurrentCalls = 20
stb.MaxConcurrentInstances = 120
serviceHost.Description.Behaviors.Add(stb)
我已经完成了一些阅读并找到了这个设置,但是现在我的代码中没有这个:
System.Net.ServicePointManager.DefaultConnectionLimit
我试图了解但并非完全理解。所以,现在我的解释,这是我的问题:
注意:如果您发布答案,请使用代码,我不使用配置文件进行绑定,我以编程方式创建绑定。
谢谢。
答案 0 :(得分:0)
我不明白你的服务是做什么的,'慢速互联网'应该影响它。您是否在每次办理登机手续时来回发送大量数据?如果没有关于设计的更多细节,很难说出发生了什么。
那就是说,我认为你应该再次看一下设计。如果服务器在响应客户端之前正在执行一个非常长时间运行的操作,那么客户端不应该只是闲逛并在HTTP上等待它一次10分钟。发送请求更有意义,然后偶尔检查一下是否完成(并且不需要保持连接)或使用net.tcp作为绑定并使用更适合保持这种冗长连接的东西( net.tcp也可以使用回调来在完成调用时通知客户端。