检测带有 WebHttpBinding 的 ServiceEndpoint 何时超时

Posted

技术标签:

【中文标题】检测带有 WebHttpBinding 的 ServiceEndpoint 何时超时【英文标题】:Detect when ServiceEndpoint with WebHttpBinding times out 【发布时间】:2021-10-10 01:00:39 【问题描述】:

我们有一个ServiceEndpoint,它支持一个返回Stream的方法。从该方法返回的Stream 对象是内存中的Pipe 类,它允许我们异步运行一些额外的代码以从另一个服务器读取并返回数据。

问题是其中一些操作需要一段时间,如果 WCF 未在WebHttpBinding.SendTimeout 设置的时间跨度内完成,则似乎 WCF 正在中止服务器端的操作

我们知道我们可以增加时间,但我们正在寻找有关如何获得超时发生通知的一些信息。我们唯一能看到的是Pipe 实例调用了Close 方法,但尚不清楚是否有办法知道它发生的原因。即客户端是否断开连接或呼叫超时。

我们可能希望根据客户端断开连接或 WCF 中止操作来以不同方式清理服务器上的资源。

【问题讨论】:

【参考方案1】:

如果我理解正确,您想打印出您想阅读的期刊部分。

也许您可以创建自己的跟踪侦听器并将其写入事件日志,并在必要时向侦听器添加过滤器以获取所需的信息。

【讨论】:

我们想在服务端代码中检测出来,这样我们就可以用不同的方式清理资源了。【参考方案2】:

您可以简单地测量管道关闭之前的时间。如果它接近WebHttpBinding.SendTimeout,您可以假设操作超时。可能不是最好的方法,但很简单。 如果您可以控制客户端代码,则可以捕获超时异常并通过调用另一个方法通知您的服务。

【讨论】:

以上是关于检测带有 WebHttpBinding 的 ServiceEndpoint 何时超时的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Microsoft JWT 令牌处理程序来保护基于 webHttpBinding 的 WCF 服务

如何保护 webHttpBinding?

如何在 webhttpbinding 配置中设置代理以使用提琴手

webHttpBinding 安全不包含消息节点?

webHttpBinding

WCF REST (WebHttpBinding) 可以遵守 PROGRAMMATIC 输出缓存策略吗?