[英]Multilayer WCF duplex communication
我有這個問題。 我有兩個WCF服務 - ServiceA
和ServiceB
。 兩種服務都托管在不同的Windows服務中,並通過net.tcp進行通信。 客戶訪問Service A
在Service A
我訪問Service B
我得到的問題是,我希望通信是雙工的。
那就是我希望客戶端在ServiceA
調用方法TestA
。 此方法將在ServiceB
調用方法TestB
。 方法TestB
將進行一些長持續時間的操作,然后將回調提升回ServiceA
,這將回調客戶端。 方法TestA
和TestB
是單向合同。
我可以達到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.