vir*_*sum 10 .net wcf web-services named-pipes
我在Windows Server 2003计算机上的单个Windows服务中托管了两个WCF服务.如果Windows服务需要访问任一WCF服务(例如发生定时事件时),它将使用公开的五个命名管道端点之一(不同的服务协定).该服务还为两个服务中的每一个公开HTTP MetadataExchange端点,并为服务器外部的使用者公开net.tcp端点.
通常情况下效果很好,但每隔一段时间我就会得到一条看起来像这样的错误信息:
System.ServiceModel.EndpointNotFoundException:没有端点侦听net.pipe:// localhost/IPDailyProcessing可以接受该消息.这通常是由错误的地址或SOAP操作引起的.有关更多详细信息,请参阅InnerException(如果存在).---> System.IO.PipeException:在本地计算机上找不到管道端点'net.pipe:// localhost/IPDailyProcessing'.---内部异常堆栈跟踪结束---服务器堆栈跟踪:System.ServiceModel.Channels.PipeConnectionInitiator.GetPipeName(Uri uri)at System.ServiceModel.Channels.NamedPipeConnectionPoolRegistry.NamedPipeConnectionPool.GetPoolKey(EndpointAddress address,Uri via)at在System.ServiceModel.Channels.ServiceMhannel的System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan超时)的System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan超时)处的System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan超时). System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel频道,TimeSpan超时)在System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan超时)的OnOpen(TimeSpan超时) System.ServiceModel.Channels.ServiceChannel上的.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout,CallOnceManager cascade).System.ServiceModel.Channels.ServiceChannel.Call(String)中System.ServiceModel.Channels.ServiceChannel.Call(String action,Boolean oneway,ProxyOperationRuntime操作,Object [] ins,Object [] outs,TimeSpan timeout)上的EnsureOpened(TimeSpan超时) System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)中的System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime操作)中的action,Boolean oneway,ProxyOperationRuntime操作,Object [] ins,Object [] outs)
它不会可靠地发生,这是令人发狂的,因为我不能在我想要的时候重复它.在我的Windows服务中,我也有一些定时事件和一些文件监听器,但这些都是相当罕见的事件.有没有人有任何想法,为什么我可能会遇到一个问题?任何帮助将不胜感激.
小智 0
我不确定这是否与您的讨论密切相关,因为我从未使用过 .net 命名管道,但我确实记得 .net tcp 套接字端点有一个已知的错误,导致“端点偶尔被终止”明显的原因”,不幸的是,微软的官方回应是一种“解决方法”,其中包括在通过套接字发送消息之前检查套接字是否仍然处于运行状态,如果不是则重新打开它。我认为命名管道端点并不像“可靠的 TCP 端点”那么不可靠,但您可能需要研究“已知的周期性 TCP 套接字故障”以查看它是否也扩展到命名管道。
抱歉,这并不是一个真正的答案,我不想建议您可能必须添加低效率的检查,以确保在发送消息之前它已启动,等等。