WCF 限制请求

Posted

技术标签:

【中文标题】WCF 限制请求【英文标题】:WCF throttles requests 【发布时间】:2021-03-05 03:36:15 【问题描述】:

我需要维护一个用 WCF 编写的旧服务。问题是在对服务进行负载测试时,请求似乎受到限制。在服务器端,平均每个调用大约需要 250 毫秒。如果我发送一个请求,它会在 250 毫秒多一点的时间内完成。如果我发送 10 个请求,前几个请求立即完成,其他请求在几秒钟内完成,其中秒数随着请求数的增加而增加。

我在这里https://github.com/popsovy/TestWcfService的一个简单项目中重现了这个问题

Service1.svc.cs 中的服务休眠 250 毫秒:

    async public Task<string> ExecuteMethod()
    
        await Task.Delay(250);
        return "Done";
    

而且,客户端创建了 100 个线程来调用该方法。这些调用似乎没有并行执行。所有线程同时启动,但有些线程在 20 秒以上结束。

有趣的是,我使用此处提供的 WebApi 创建了一个类似的项目https://github.com/popsovy/TestWebApi,其行为是我所期望的——所有 100 个线程几乎立即启动,所有线程在大约 260 毫秒内完成——预期行为.

WCF 服务似乎受到限制或阻止执行许多并发请求。有没有办法让 WCF 版本表现得像 WebApi 版本一样——同时处理所有请求?

谢谢。

【问题讨论】:

可以尝试添加ServiceBehavior属性,使用并发模式同时处理多条消息。并发方式可以参考:docs.microsoft.com/en-us/dotnet/framework/wcf/samples/… 【参考方案1】:

这是一个客户端问题——在对服务执行多线程调用之前,我必须调用 client.Open()。

【讨论】:

以上是关于WCF 限制请求的主要内容,如果未能解决你的问题,请参考以下文章

WCF 调用的 IIS 请求限制回收

WCF GET URL 长度限制问题:错误请求 - 无效 URL

(413) 使用 WCF 请求实体太大错误

WCF REST 服务 400 错误请求

WCF Restful Web 服务客户端限制

取消异步 WCF 请求的最佳方法是啥?