我正在从表单调用 WCF 服务。服务托管在 IIS 中。该服务具有以下属性:InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple
我已将所有并发调用、实例和会话的限制行为设置为最大 2000。
但是我似乎无法收到超过 200 个异步请求。之后服务就没有响应,会话最终超时。
我正在使用异步调用来调用服务中的方法,即 复制代码
IASyncResult res= Proxy.BeginMethod(endCall,null);
然后为了捕捉响应,我有一个 endCall 函数,它接收 IASyncResult 并通过 EndMethod() 处理结果。
在负载模拟@ 1 方法调用一秒钟,一切正常,直到大约 200 个调用,然后只是等待......(此时我有 199 或 198 个来自这 200 个调用的响应).. - 所以理论上存在不应该是 200 个并发会话,只有 2 个左右..
也许有一些我没有做的垃圾收集或关闭?有什么建议么?
- - 更新 - -
我认为答案可能更多的是代理的关闭不是以线程安全的方式处理的。正如 Radik 上面指出的那样,关闭代理很重要,但是随着许多 IASyncState 结果同时出现,您必须确保在正确的时间关闭正确的结果。
我确实尝试从一个线程中触发关闭代理以让它单独处理它:
ThreadPool.QueueUserWorkItem(CloseProxy, ar.AsyncState);
但这似乎不起作用。对此有何建议?