パブリッシャーとサブスクライバーのメカニズムを 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
、アボートされているため、通信に使用できません...
コールバック チャネルが中止されるのはなぜですか? 私を助けてください ... :(