c# - 在客户端中止时取消 WCF 操作

标签 c# .net wcf

我有一个 Silverlight 客户端,它可以在我的 WCF Web 服务上调用一个方法来从数据库中获取值。在长查询的情况下,我想给用户取消它的选项。

客户端,当用户按下“取消”时,我在我的 WCF 实例上调用“.Abort()”。但是,我的 WCF 服务仍将继续运行,因为它不知道客户端不再连接。

我的问题是:WCF 服务是否可能知道客户端已终止连接?

我尝试在我的契约(Contract)方法中订阅 Channel.Closed/faulted 事件,但它们从未触发...

[AspNetCompatibilityRequirements(RequirementsMode =  AspNetCompatibilityRequirementsMode.Allowed)]
internal class MyContract: IMyContract
{
    public object QueryDatabase(...)
    {
        System.ServiceModel.OperationContext.Current.Channel.Faulted += new System.EventHandler(Channel_Faulted);
        System.ServiceModel.OperationContext.Current.Channel.Closed += new System.EventHandler(Channel_Faulted);

        // Perform sql query
    }

    void Channel_Faulted(object sender, System.EventArgs e)
    {
        // Cancel SQL query here
    }
}

有人知道怎么做吗? 谢谢!

最佳答案

Faulted 和 Closed 事件确实可以按照您在代码示例中使用它们的方式使用,但只有当您使用的绑定(bind)支持可靠 session ,并且您启用了可靠 session 时。检查您使用的绑定(bind)是否支持它,如果支持则启用它。

<bindings>
  <netTcpBinding>
    <binding>
      <reliableSession ordered="true"
            inactivityTimeout="0:10:0"
            enabled="true" />
    </binding>
  </netTcpBinding>
</bindings>

如果您的绑定(bind)不支持此功能,那么您可以考虑切换到支持的绑定(bind)。 You can find a list of what is supported for the different bindings here.

关于c# - 在客户端中止时取消 WCF 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6390450/

相关文章:

c# - 从 Windows 到 Linux 构建 C# 应用程序

c# - 组合两个返回两个不同值的方法

c# - Tamarin Studio中出现关于 “Cannot Declare Instance Members in Static Class”的错误消息

c# - 什么是编程中的托管代码或非托管代码?

c# - 如何从 .Net Core 3 创建 Windows 服务

c# MapHttpAttibuteRoutes 不能使用具有不同参数的相同操作?

c# - WPF设计问题

c# - 没有 SVC 文件的 WCF 依赖注入(inject)

asp.net - WCF 和 REST 与 SOAP

WCF 服务返回不同的 CustomType 然后 SharedLibrary 类型?