在net.pipe:// localhost / MyService

时间:2016-09-19 08:24:24

标签: wcf

我有一个WCF服务,其中有一些方法。一个方法名称是KilProcess(),它杀死创建的Windows进程并包含代码

public void KilProcess()
{

    Process.GetCurrentProcess().Kill();
}

它在我的机器上工作但在客户机(高配置机器)中这个WCF服务停止并抛出异常

  

2016-09-15 16:08:11,789 INFO [stdout](默认任务-120)   1473948491783 SystemLog 1473948491078 ScriptEngine - 没有   端点侦听net.pipe:// localhost / MyService,可以接受   消息。这通常是由不正确的地址或SOAP引起的   行动。有关更多详细信息,请参阅InnerException(如果存在)。服务器   堆栈跟踪:at   System.ServiceModel.Channels.PipeConnectionInitiator.GetPipeName(URI   uri,IPipeTransportFactorySettings transportFactorySettings)at   System.ServiceModel.Channels.NamedPipeConnectionPoolRegistry.NamedPipeConnectionPool.GetPoolKey(的EndpointAddress   地址,Uri via)at   System.ServiceModel.Channels.CommunicationPool`2.TakeConnection(的EndpointAddress   地址,Uri via,TimeSpan超时,TKey&关键)at   System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(时间跨度   超时)at   System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(时间跨度   超时)at   System.ServiceModel.Channels.CommunicationObject.Open(时间跨度   超时)at   System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
  在System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan   超时)at   System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel   频道,TimeSpan超时)at   System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(时间跨度   超时,CallOnceManager级联)at   System.ServiceModel.Channels.ServiceChannel.Call(String action,   Boolean oneway,ProxyOperationRuntime操作,Object [] ins,   对象[]出局,TimeSpan超时)at   System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage   methodCall,ProxyOperationRuntime operation)at   System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即时聊天   消息)在[0]处重新抛出异常:at   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即时聊天   reqMsg,IMessage retMsg)at   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&安培;   msgData,Int32类型)at   Myprod.TestFacade.Interface.IScriptProcess.UnregisterProcess(的Int32   Program.KillProcess()的ProcessId,String taskId ..

任何人都可以知道为什么(WCF服务)停止了吗?

2 个答案:

答案 0 :(得分:1)

首先,您必须知道net.pipes仅用于进程间通信(在同一台机器上进行2个进程)。 您还必须告诉我们有关您要执行的操作的更多详细信息。在你的解释中,看起来你正在使用两台不同的机器,对吧? 然后net.tcp输入管道是你正在寻找的(https://msdn.microsoft.com/en-us/library/ff649818.aspx

但如果情况并非如此,请尝试向我们提供更多详细信息,上下文和您的WCF配置文件是一个良好的开端。

答案 1 :(得分:0)

您没有提供有关您的代码或客户端/服务器设置的大量详细信息,因此我的回答将是一般性的。如果它在您的计算机上运行正常但在客户端计算机上运行不正常,那么您可以检查以下几项:

  1. 命名管道是完成进程间的方法 通信(IPC),其中(至少对于WCF)您的命名管道服务器(在 在这种情况下,您的WCF服务)必须与您的客户端在同一台计算机上。作为一方 请注意,Named Pipes可用于跨计算机之间的通信 网络,但这不是WCF的Named实现的情况 管道,服务器和客户端必须限制在同一个管道中 机。

  2. 您可以使用Process Explorer https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx) 进行故障排除并确保命名管道服务器端点处于活动状态。 只需转到Find->查找句柄或dll,然后使用命名管道的名称进行搜索。这个棘手的部分是 实际命名管道名称实际上是由生成的guid 视窗。看看这篇有趣的文章,了解如何获取管道的实际名称: https://blogs.msdn.microsoft.com/rodneyviana/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and-how-to-find-the-actual-windows-object-name/

  3. 您的服务器和客户端是否在不同的安全上下文中运行? 查看Chris Dickson对此SO问题的回答: Named pipe not found when using WCF netNamedPipeBinding。他解释了如果客户端在不同的上下文中运行,可能无法找到命名管道的原因。