C# WCF:如何识别挂起的HTTP请求 观察到的行为(示例):

C# WCF:如何识别挂起的HTTP请求 观察到的行为(示例):,c#,wcf,request,queue,C#,Wcf,Request,Queue,当向我的WCF服务发送100个HTTP请求时,WCF框架只接收和发送11个请求,因为我的后端代码将并发处理限制为一次10个请求 根据Fiddler的说法,第12个HTTP请求实际上甚至在传输级别上都没有收到 我对服务器端的每个请求模拟了5秒的处理时间。一旦前10个请求中的一个已被处理且第11个请求的处理已开始,则从网络套接字读取第12个请求 问题 我想监控当前有多少请求处于挂起状态。最后,我希望在队列超过某个限制后拒绝新请求 测试设置 WCF服务的配置如下(伪代码): 此外,我还添加了一个自定义

当向我的WCF服务发送100个HTTP请求时,WCF框架只接收和发送11个请求,因为我的后端代码将并发处理限制为一次10个请求

根据Fiddler的说法,第12个HTTP请求实际上甚至在传输级别上都没有收到

我对服务器端的每个请求模拟了5秒的处理时间。一旦前10个请求中的一个已被处理且第11个请求的处理已开始,则从网络套接字读取第12个请求

问题 我想监控当前有多少请求处于挂起状态。最后,我希望在队列超过某个限制后拒绝新请求

测试设置 WCF服务的配置如下(伪代码):

此外,我还添加了一个自定义契约行为,以应用我自己的固定大小线程池进行请求处理(使用.NET线程池时的行为几乎相同):

其中SYNCHRONIZER是一个从SynchronizationContext派生的类,它重写“Post”方法以实际使工作项排队

笔记
  • 我测试了客户端:并发地向服务发送100个HTTP请求没有问题。如果我将服务器端工作线程数增加到100,所有请求都会立即传输,整个测试执行时间为5秒
  • System.ServiceModel中的Windows性能计数器“调用未完成”显示已调度请求的数量(因此它没有用处)
  • 我尝试附加不同的性能分析器。但他们并没有引导我找到神秘的代码位置,线程在那里阻止请求接收
有人能解释观察到的行为吗

ServiceBehaviorAttribute.ConcurrencyMode = ConcurrencyMode.Multiple
ServiceBehaviorAttribute.InstanceContextMode = InstanceContextMode.Single
ServiceThrottlingBehavior.MaxConcurrentCalls = int.MaxValue
ServiceThrottlingBehavior.MaxConcurrentInstances = int.MaxValue
ServiceThrottlingBehavior.MaxConcurrentSessions= int.MaxValue
    void IContractBehavior.ApplyDispatchBehavior(
        ContractDescription contractDescription, 
        ServiceEndpoint endpoint, 
        DispatchRuntime dispatchRuntime)
    {
        dispatchRuntime.SynchronizationContext = SYNCHRONIZER;
    }