簡體   English   中英

取消客戶端中止的WCF操作

[英]Cancel WCF operation on client abort

我有一個silverlight客戶端,可以調用我的WCF Web服務上的方法來從數據庫中獲取值。 在長查詢的情況下,我想給用戶提供取消它的選項。

客戶端,當用戶按“取消”時,我在我的WCF實例上調用“.Abort()”。 但是,我的WCF服務仍將繼續其操作,因為它不知道客戶端不再連接。

我的問題是:WCF服務是否有可能知道客戶端已經終止連接?

我曾嘗試在我的合同方法中使用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事件確實可以按照您在代碼示例中使用它們的方式使用,但前提是您使用的綁定支持可靠的會話 ,並且您啟用了可靠的會話。 檢查您使用的綁定是否支持它,如果支持,則啟用它。

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

如果你的綁定不支持這個,那么你可以考慮切換到那個。 您可以在此處找到不同綁定支持的列表。

客戶端需要向服務發送另一個請求,讓它知道它需要取消 - 這是假設

  1. 該服務可以識別正在為該取消客戶端執行的工作
  2. 正在執行的工作實際上是可取消的(許多異步操作都沒有取消API

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM