C# 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

我用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;}    
}     
我使用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);

        }
    }