【问题标题】:There was no endpoint listening at net.pipe://localhost/在 net.pipe://localhost/ 没有端点监听
【发布时间】:2010-11-17 20:17:31
【问题描述】:

我有两个 WCF 服务托管在 Windows Server 2003 机器上的单个 Windows 服务中。如果 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 地址,Uri via) 在 System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan 超时) 在 System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(时间跨度超时) 在 System.ServiceModel.Channels.CommunicationObject.Open(时间跨度超时) 在 System.ServiceModel.Channels.ServiceChannel.OnOpen(时间跨度超时) 在 System.ServiceModel.Channels.CommunicationObject.Open(时间跨度超时) 在 System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel 通道,TimeSpan 超时) 在 System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan 超时,CallOnceManager 级联) 在 System.ServiceModel.Channels.ServiceChannel.EnsureOpened(时间跨度超时) 在 System.ServiceModel.Channels.ServiceChannel.Call(字符串操作,布尔单向,ProxyOperationRuntime 操作,Object[] 输入,Object[] 输出,TimeSpan 超时) 在 System.ServiceModel.Channels.ServiceChannel.Call(字符串操作,布尔单向,ProxyOperationRuntime 操作,Object[] 输入,Object[] 输出) 在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage 方法调用,ProxyOperationRuntime 操作) 在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 消息)

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

【问题讨论】:

  • 我也在为同样的问题而苦苦挣扎,你有没有找到解决办法?定期发生此错误。在某些情况下,异常是“无法发送消息,因为端点地址 'net.pipe://localhost/d927b6b5-5994-4bd2-b92a-2fbdbae18d28/SendEmailWorkflow/Creation 的服务”的协议不可用地址'。该服务未托管在 IIS 中,因此排除了 IIS/AppPool 重置。

标签: .net web-services wcf named-pipes


【解决方案1】:

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

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

【讨论】:

  • 刚刚看到问题发布日期:) 作者:如果您解决了问题 - 请发布解决方案或问题原因。
【解决方案2】:

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

【讨论】:

  • 我也收到此错误消息,使用 IIS 下托管的 net.pipe。 iisreset 自己没有解决任何问题,重新启动此服务 + iisreset 解决了问题。
【解决方案3】:

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

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

【讨论】:

  • 您能否提供任何指向您描述的“已知错误”和“MS 官方回复”的链接。
  • @Chris Dickson:已经有一段时间了,但我会尝试找到它们并将它们添加到这里。抱歉,如果需要一段时间。
  • 好的,事实证明,我们遇到的错误(当时没有适当地识别自己)已经被隔离到套接字耗尽,现在有更好的文档记录。所以,除非你用尽你的套接字,否则我怀疑我的建议是否中肯。你可以看看你是否已经用尽了你的套接字,如果你还没有的话。
猜你喜欢
  • 2014-06-23
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
相关资源
最近更新 更多