【发布时间】:2018-02-15 21:18:33
【问题描述】:
我们需要根据客户提供给我们的 WSDL 服务规范为客户实现 WCF 服务。我们必须实现该服务,以便它一次只能处理一个请求。配置服务很容易,所以带有限制属性,我们目前正在使用这种配置。
<serviceThrottling maxConcurrentCalls="1" maxConcurrentInstances="1" maxConcurrentSessions="1" />
但问题是,如果客户在服务繁忙时提出请求(该过程有时可能需要长达两个小时的时间来处理),他们的请求将超时。但 IIS / WCF 服务仍会将请求放入队列。 (这是核心问题!)因为客户的请求超时,他们正在发出新的请求,我们最终会多次处理相同的请求。
我需要
- 当客户提出请求时立即发送接受 202 状态,但仍继续一次处理一个请求。 (更好)
- 不要将请求放入队列并让请求像现在这样超时或立即发送拒绝。 (好的)
如果我能以某种方式发现运行时,我也可以管理
- 队列中有多少请求? (如果我允许处理多个请求,我可以丢弃在服务繁忙时到达的请求。)
- 最初的请求是什么时候提出的? (我可以在特定时间后停止处理来自队列的请求。)
【问题讨论】:
-
我猜只是在配置值中设置适当的超时值。
-
您好,您是说在客户端?不幸的是,我们无法完全控制客户如何使用服务。他们说他们目前有大约 8 分钟的超时时间,但这通常是不够的,并且由于某种原因他们不能延长它。如果你的意思是服务器端,你能帮我解决这个问题吗?
-
您也可以在自己这边指定。当您的客户找到服务参考时,它会根据您的
wsdl创建它的配置文件。所以所有的设置都可以由你指定。 -
不幸的是,这并没有多大帮助。我将所有四个超时值都设置为 10 秒,并尝试使用 SoapUI 自己调用服务。请求没有那么快超时,每个请求都被添加到队列中。
标签: wcf web-config queue