【问题标题】:How to control WCF service responses when service is busy服务繁忙时如何控制 WCF 服务响应
【发布时间】:2018-02-15 21:18:33
【问题描述】:

我们需要根据客户提供给我们的 WSDL 服务规范为客户实现 WCF 服务。我们必须实现该服务,以便它一次只能处理一个请求。配置服务很容易,所以带有限制属性,我们目前正在使用这种配置。

<serviceThrottling maxConcurrentCalls="1" maxConcurrentInstances="1" maxConcurrentSessions="1" />

但问题是,如果客户在服务繁忙时提出请求(该过程有时可能需要长达两个小时的时间来处理),他们的请求将超时。但 IIS / WCF 服务仍会将请求放入队列。 (这是核心问题!)因为客户的请求超时,他们正在发出新的请求,我们最终会多次处理相同的请求。

我需要

  1. 当客户提出请求时立即发送接受 202 状态,但仍继续一次处理一个请求。 (更好)
  2. 不要将请求放入队列并让请求像现在这样超时或立即发送拒绝。 (好的)

如果我能以某种方式发现运行时,我也可以管理

  1. 队列中有多少请求? (如果我允许处理多个请求,我可以丢弃在服务繁忙时到达的请求。)
  2. 最初的请求是什么时候提出的? (我可以在特定时间后停止处理来自队列的请求。)

【问题讨论】:

  • 我猜只是在配置值中设置适当的超时值。
  • 您好,您是说在客户端?不幸的是,我们无法完全控制客户如何使用服务。他们说他们目前有大约 8 分钟的超时时间,但这通常是不够的,并且由于某种原因他们不能延长它。如果你的意思是服务器端,你能帮我解决这个问题吗?
  • 您也可以在自己这边指定。当您的客户找到服务参考时,它会根据您的wsdl 创建它的配置文件。所以所有的设置都可以由你指定。
  • 不幸的是,这并没有多大帮助。我将所有四个超时值都设置为 10 秒,并尝试使用 SoapUI 自己调用服务。请求没有那么快超时,每个请求都被添加到队列中。

标签: wcf web-config queue


【解决方案1】:

我通过允许更多并发调用并在我自己的代码中维护自己的并发队列来解决这个问题。幸运的是,这似乎可行,也是消费者的最佳解决方案。

换句话说,业务问题已解决,但不是我最初尝试的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多