10

我在 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) 在 System.ServiceModel.Channels.NamedPipeConnectionPoolRegistry.NamedPipeConnectionPool.GetPoolKey(EndpointAddress address, Uri via) 在System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan 超时)在 System.ServiceModel.Channels.ClientFramingDuplexSessionChannel。

它不会可靠地发生,这很让人抓狂,因为我无法在我想重复的时候重复它。在我的 Windows 服务中,我也有一些定时事件和一些文件侦听器,但这些是相当罕见的事件。有谁知道为什么我可能会遇到问题?任何帮助将不胜感激。

4

3 回答 3

7

检查“Net.Pipe Listener Adapter”服务是否在服务管理控制台中运行。WAS 使用它来接收命名管道上的任何请求。

于 2011-06-14T13:08:38.233 回答
1

我过去遇到过类似的错误,如果我没记错的话,传递给/从服务的数据有问题。就我而言,问题在于数据大小(我使用了 WSHttpBinding,所以有一个 http 默认限制)。我发现问题的方法是在相关方法中添加日志记录,找到有问题的数据,并尝试在一些调试友好的环境中重现问题,并使用您找到的数据使其不断发生(崩溃)。

在我的情况下,异常消息与问题无关,这有时发生在 WCF 中。

于 2011-12-25T22:26:04.397 回答
0

我不确定这是否与您的讨论密切相关,因为我从未使用过 .net 命名管道,但我确实记得 .net tcp 套接字端点有一个已知错误,导致“端点偶尔会无缘无故地终止明显的原因”,不幸的是,官方的 MS 响应是一个“解决方法”,它涉及在通过它发送消息之前检查套接字是否仍然处于运行状态,并在它不是的情况下重新打开它。我想认为命名管道端点不像“可靠的 TCP 端点”那样不可靠,但您可能想查看“已知的周期性 TCP 套接字故障”以查看它是否也扩展到命名管道。

抱歉,这不是一个真正的答案,我不想建议您可能必须添加检查的低效率,以确保在发送消息之前它已经启动,等等。

于 2011-01-11T09:48:59.120 回答