我有一个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服务)停止了吗?
答案 0 :(得分:1)
首先,您必须知道net.pipes仅用于进程间通信(在同一台机器上进行2个进程)。 您还必须告诉我们有关您要执行的操作的更多详细信息。在你的解释中,看起来你正在使用两台不同的机器,对吧? 然后net.tcp输入管道是你正在寻找的(https://msdn.microsoft.com/en-us/library/ff649818.aspx)
但如果情况并非如此,请尝试向我们提供更多详细信息,上下文和您的WCF配置文件是一个良好的开端。
答案 1 :(得分:0)
您没有提供有关您的代码或客户端/服务器设置的大量详细信息,因此我的回答将是一般性的。如果它在您的计算机上运行正常但在客户端计算机上运行不正常,那么您可以检查以下几项:
命名管道是完成进程间的方法 通信(IPC),其中(至少对于WCF)您的命名管道服务器(在 在这种情况下,您的WCF服务)必须与您的客户端在同一台计算机上。作为一方 请注意,Named Pipes可用于跨计算机之间的通信 网络,但这不是WCF的Named实现的情况 管道,服务器和客户端必须限制在同一个管道中 机。
您可以使用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/
您的服务器和客户端是否在不同的安全上下文中运行? 查看Chris Dickson对此SO问题的回答: Named pipe not found when using WCF netNamedPipeBinding。他解释了如果客户端在不同的上下文中运行,可能无法找到命名管道的原因。