gpt4 book ai didi

wcf - "cooperatively"终止 WCF 服务的方法(基本 HTTP,非双工)

转载 作者:行者123 更新时间:2023-12-02 04:51:21 24 4
gpt4 key购买 nike

我有一个 WCF 服务需要很长的时间来运行。 (为了这个问题,我对中断服务调用不感兴趣。)

但是,当客户端强行断开连接时,WCF 服务将继续运行直至完成 - 即使客户端永远不会收到响应。

我找到了有关可靠消息传递(此处似乎不适用)、双工 channel /行为(我不想实现或要求)的信息,并了解如何“分解”服务请求。

但是,我想知道是否可能没有像后台工作人员的 CancellationPending 属性那样的“简单”方法,那么该服务将看起来像这样:

while (!WCFRequest.CancellationPending && !FinishedWithLongOperation) {
DoOnePartOfTheLongOperation();
}

如果没有,有没有办法添加这样的?或者甚至用严重的异常(即 TheadInterruptedException)踢 WCF 线程?

服务本身被设计为在完成工作和报告此类工作时完全幂等。


WCF 服务托管在 IIS 7 中,我怀疑这可能是相关的。

最佳答案

对于 在 IIS 中托管 作为 HTTP/HTTPS 端点的 WCF 服务,我使用 HttpResponse.IsClientConnected在这里工作 (TM)。

注意:这取决于托管服务器(例如 IIS)正确检测断开连接的能力。通常,这些必须有序断开。 YMMV.

代码在功能上等同于:

while (!FinishedWithLongOperation) {
if (Connection.ClientConnectedStatus == ClientStatus.Disconnected) {
throw new Exception("Client definitely disconnected!");
}
DoOnePartOfTheLongOperation();
}

注意事项:

  • “连接”是通过依赖注入(inject)注入(inject)的(因此理论上可以将其更改为其他堆栈)并且..
  • .. ClientConnectedStatus 返回 {Connected, Disconnected, Unknown} 之一;中止仅在客户端“明确断开连接”时发生,因此 ..
  • .. 如果没有 IIS/HTTPContext,则 ClientConnectedStatus 将始终返回 Unknown 并防止潜在的错误未连接情况(例如,如果以其他方式托管)。

关于wcf - "cooperatively"终止 WCF 服务的方法(基本 HTTP,非双工),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27989594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com