簡體   English   中英

多層WCF雙工通信

[英]Multilayer WCF duplex communication

我有這個問題。 我有兩個WCF服務 - ServiceAServiceB 兩種服務都托管在不同的Windows服務中,並通過net.tcp進行通信。 客戶訪問Service A Service A我訪問Service B 我得到的問題是,我希望通信是雙工的。

那就是我希望客戶端在ServiceA調用方法TestA 此方法將在ServiceB調用方法TestB 方法TestB將進行一些長持續時間的操作,然后將回調提升回ServiceA ,這將回調客戶端。 方法TestATestB是單向合同。

溝通方案

我可以達到ServiceA將回調提升回客戶端的程度。 然后它在InvalidCastException上崩潰,試圖在操作上下文中獲取回調通道。

IServiceACallback Callback
    {
        get
        {
            return OperationContext.Current.GetCallbackChannel<IServiceACallback>();
        }
    }

是因為我在一個不同的線程,操作上下文只是不完整? 因為當我沒有從ServiceB另一個回調中進行回調時,我可以將回調引回到客戶端。 我可以解決一些服務屬性嗎? 或者是否有一些我可以使用的溝通模式?

好的,我明白了。

通過將ServiceB回調提升到ServiceA我處於不同的OperationContext中。 這個上下文是完全不同的線程,所以沒有與Client連接,而是從ServiceB獲得OperationContext的一部分。

我向ServiceA CallbackHandler添加了新成員,指向OperationContext。 為此,我在使用DuplexChannelfactory創建ServiceB期間傳遞當前上下文。 此上下文是正確的,可用於將回調提升回Client 我希望代碼讓它變得可以理解。

ServiceA創建ServiceB

InstanceContext context = new InstanceContext(new CallbackHandler(OperationContext.Current));
ChannelFactory<IService> factory = new DuplexChannelFactory<IServiceB>(context, binding, address);
IServiceB service = factory.CreateChannel();

ServiceA CallbackHandler:

public class CallbackHandler : IServiceBCallback
{
    OperationContext _context;

    public CallbackHandler(OperationContext context)
    {
        _context = context;
    }

    public void TestProgress(string msg)
    {
        IServiceACallback callback = _context.GetCallbackChannel<IServiceACallback>();
        callback.TestProgress(msg);
    }
}

暫無
暫無

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

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