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