C# WCF回调通道中止异常
我用WCF实现了发布者-订阅者机制 以下是我订阅回调的方式:C# WCF回调通道中止异常,c#,wcf,windows-services,C#,Wcf,Windows Services,我用WCF实现了发布者-订阅者机制 以下是我订阅回调的方式: public delegate void AsyncResponseEventHandler(AsyncResponse asyncResponse); public static event AsyncResponseEventHandler AsyncResponseEvent; public static IMyEvents Subscriber; public void SubscribeEv
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;}
}
我使用RaiseAsynResponse方法向客户端发出回调
当服务主机是windows服务,我启动服务并开始调试时,第一次一切正常,但当我停止客户端应用程序并在不重新启动windows服务的情况下重新启动调试时,我会遇到异常:通信对象,System.ServiceModel.Channels.ServiceChannel
,无法用于通信,因为它已被中止
为什么回调通道被中止?
请帮帮我…:(因为“但是当我停止客户端应用程序时”是答案。一旦停止客户端应用程序,System.ServiceModel将释放通道上的保留。如果终止服务或客户端,则无法将数据从服务发送到客户端,反之亦然。感谢您的回答…因此我的问题是基于NetCpBinding如何处理回调,我如何实现双工消息p尝试如果我重新启动客户端,我将不必重新启动服务?首先,在客户端调用函数时,您始终可以获取客户端的回调通道。否则,您将需要存储回调通道,可能是在字典中。然后,当客户端启动时,它应该进行服务调用以“注册”它是回调通道。然后服务可以随时使用它。在该服务调用中,订阅ChannelClosed事件,并在客户端断开连接时删除该通道。重新启动客户端时,它应该再次调用该服务以注册其回调。
public class MySubscriber : IMyEvents
{
public void AsyncResponseCallBack(AsyncResponse asyncResponse)
{
AsyncResponseEventArgs e = new AsyncResponseEventArgs()
{
Response = asyncResponse
};
OnAsyncResponseReceived(this, e);
}
}