一次错误-通信对象已中止,因此无法用于通信

时间:2018-10-26 13:42:49

标签: c# named-pipes

WinForms应用程序(服务器)启动另一个应用程序(客户端),并且使用NetNamedPipeBinding建立两者之间的双向通信。 该服务使用

启动
private void StartServiceHost()
{
    NetNamedPipeBinding binding = new NetNamedPipeBinding();
    binding.ReceiveTimeout = new TimeSpan(24, 0, 0);
    binding.SendTimeout = new TimeSpan(24, 0, 0);
    m_ServiceHost = new ServiceHost(typeof(ExnService), new Uri(ExnIPCUtil.ExnServiceBaseAddress));
    m_ServiceHost.AddServiceEndpoint(typeof(IExnService), binding, ExnIPCUtil.ExnServiceEndPointAddress);
    m_ServiceHost.Open();
}

在客户端上

public ExnServiceClient()
{
    var callback = new ExnServiceCallBack();
    var context = new InstanceContext(callback);
    var pipeFactory =
         new DuplexChannelFactory<IExnService>(context,
         new NetNamedPipeBinding(),
         new EndpointAddress(ExnIPCUtil.ExnServiceBaseAddress + "/" + ExnIPCUtil.ExnServiceEndPointAddress));
    ExnService = pipeFactory.CreateChannel();
    ExnService.Connect();
}

工作正常,但是最近在客户的计算机上,我们收到以下错误消息

  

System.ServiceModel.CommunicationObjectAbortedException:   通信对象System.ServiceModel.Channels.ServiceChannel,   由于已中止,因此无法用于通信。服务器   堆栈跟踪:   System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrNotOpen()   在System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan   超时)在System.ServiceModel.Channels.ServiceChannel.Call(String   操作,布尔型单向操作,ProxyOperationRuntime操作,Object [] ins,   Object []超时,TimeSpan超时)在   System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage   methodCall,ProxyOperationRuntime操作)在   System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage   消息)在[0]处抛出异常:   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage   reqMsg,IMessage retMsg)   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&   msgData,Int32类型)位于ExnIPC.IExnService.SendMessage(Int32 msgId,   字符串消息)

.....应用程序调用

服务器和客户端应用程序都在同一台计算机上。 问题在于,到目前为止,它仅发生过一次,因此我们无法确定重新创建它的步骤。 我发现了几则关于同一问题的帖子,但与我的案例无关,因此任何可能的解释/想法都将非常有帮助。

0 个答案:

没有答案