1
我使用WCF實現了發佈者 - 訂閱者機制。WCF回調通道異常終止
我這是怎麼認購回調:
public delegate void AsyncResponseEventHandler(AsyncResponse asyncResponse);
public static event AsyncResponseEventHandler AsyncResponseEvent;
public static IMyEvents Subscriber;
public void SubscribeEvent()
{
Subscriber = OperationContext.Current.GetCallbackChannel<IMyEvents>();
AsyncResponseEvent += new AsyncResponseEventHandler (Subscriber.AsyncResponseCallBack);
}
public static void RaiseAsyncResponse(AsyncResponse asyncResponse)
{
try
{
AsyncResponseEvent.Invoke(asyncResponse);
}
catch (Exception ex) {throw;}
}
而且這是MySubscriber類代碼:
public class MySubscriber : IMyEvents
{
public void AsyncResponseCallBack(AsyncResponse asyncResponse)
{
AsyncResponseEventArgs e = new AsyncResponseEventArgs()
{
Response = asyncResponse
};
OnAsyncResponseReceived(this, e);
}
}
我用RaiseAsyncResponse方法來提高回調到客戶端,
時服務主機是Windows服務,我啓動服務,我開始調試,一切工作正常,但當我停止客戶端應用程序並重新啓動調試與重新啓動Windows服務,我面臨的例外:通信對象,System.ServiceModel.Channels.ServiceChannel
,不能用於通信,因爲它已被中止...
爲什麼回調通道被中止? 請幫我... :(
謝謝你的答案...所以我的問題是基於nettcpbinding如何工作的回調,我怎麼能實現雙工消息模式如果我重新啓動客戶端,我不需要重新啓動服務? – 2013-05-11 03:55:34
首先,您隨時可以在客戶端調用函數時獲取客戶端的回調通道,否則您需要將回調通道存儲在字典中。然後,當客戶啓動時,它應該打一個服務電話給「註冊「它是回調通道。然後服務可以隨時使用它。在該服務調用中,訂閱ChannelClosed事件,並在客戶端斷開時刪除該頻道。當您重新啓動客戶端時,它應該再次調用該服務來註冊其回調。 – Jeff 2013-05-13 13:32:48
非常感謝你;) – 2013-05-14 06:18:59