簡體   English   中英

在執行合同操作期間調用回調

[英]invoke callback during the execution of a contract operation

我正在Azure上編寫WCF服務。

在我的服務中,我需要在執行合同操作期間調用回調。 當我嘗試這樣做時,將拋出異常並且客戶端將被鎖定。 我認為這是因為通道打開合同操作,調用當前通道中的回調會鎖定線程,對不對? 我想為這種情況獲得解決方案。

這是超時異常消息:

發送到net.tcp://127.255.0.0:8000 / MytestWCFService的請求操作未在配置的超時(00:00:59.9889989)內收到回復。 分配給此操作的時間可能是較長超時的一部分。 這可能是因為服務仍在處理操作,或者因為服務無法發送回復消息。 請考慮增加操作超時(通過將通道/代理強制轉換為IContextChannel並設置OperationTimeout屬性)並確保該服務能夠連接到客戶端。

編輯:代碼示例

[ServiceContract(Namespace="testnamespace")]   
public interface ICallback   
{   
    [OperationContract(IsOneWay=true)]   
    void Callbackmethod();   
}  

然后我在服務端實現IContract:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single,   
    ConcurrencyMode=ConcurrencyMode.Reentrant,   
    AddressFilterMode=AddressFilterMode.Any)]   
public class WCFService : IContract   
{      
   public int Add(int a, int b)   
   {   
       int result = a + b;  
       ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();   
       callback.Callbackmethod();   
       return result;   
   }   
}   

我正在回撥當前頻道,它是一個雙工頻道。

如果您的操作和回調是雙向的,那么您很可能遇到死鎖問題。 使用以下屬性標記您的服務類:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
public class MyService : IMyServiceContract { ... }

編輯:

同樣在您的WPF應用程序中將此添加到回調實現的實現中:

[CallbackBehavior(UseSynchronizationContext = false)]

暫無
暫無

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

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