簡體   English   中英

WCF雙工服務在回調呼叫時凍結

[英]wcf duplex service freezes on callback call

服務合同:

[ServiceContract(CallbackContract = typeof(IClientCallBackChannel),
SessionMode = SessionMode.Required)]
 public interface IServerService
 {
     [OperationContract(IsOneWay = true)]
      void foo();
 }

客戶合同:

public interface IClientCallBackChannel
{
    [OperationContract(IsOneWay = false)]
    object DoCommand(Command command);
}


class ClientCallBackChannelImpl
{
    public object DoCommand(Command command)
    {
        // freezes service
        serverService.foo();

        // OK
        new Action(() =>
        {
             Thread.Sleep(1000);                          
             serverService.foo();                                          
        }
            ).BeginInvoke(null,null);

     }            
}

我有一個雙工服務,當我調用一個客戶端方法“ DoCommand”時,該方法內部有一個對Service方法foo的調用,我的服務凍結了。 如果我異步調用foo,則效果很好,但是我需要同步調用。

我認為問題在於您需要DoCommand返回一個值,因此無法使其成為OneWay。 如果您考慮這一點,這將阻止您的服務。

您可以將ServiceBehavior的ConcurrencyMode設置為Multiple,這應該可以工作,但是恕我直言,這不是最佳選擇。

當您進行雙向通信時,請嘗試堅持使用OneWay-Methods-這樣可以解決問題,並避免上述行為引起的棘手的並發問題。

暫無
暫無

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

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