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 限制请求的主要内容,如果未能解决你的问题,请参考以下文章