簡體   English   中英

net.pipe:// localhost / MyService上沒有端點偵聽

[英]There Was No Endpoint Listening At net.pipe://localhost/MyService

我有一個WCF服務,其中有一些方法。 方法名稱之一是KilProcess(),它會殺死創建的Windows進程,並且其中包含代碼

public void KilProcess()
{

    Process.GetCurrentProcess().Kill();
}

它在我的機器上工作,但是在客戶端機器(高配置機器)中,此WCF服務正在停止並引發異常

2016-09-15 16:08:11,789信息[stdout](默認任務120)1473948491783 SystemLog 1473948491078 ScriptEngine-net.pipe:// localhost / MyService上沒有偵聽終結點的端點可以接受該消息。 這通常是由不正確的地址或SOAP操作引起的。 有關更多詳細信息,請參見InnerException(如果存在)。 服務器堆棧跟蹤:位於System.ServiceModel.Channels.Communication`上的System.ServiceModel.Channels.NamedPipeConnectionPoolRegistry.NamedPipeConnectionPool.GetPoolKey(EndpointAddress地址,Uri通過)上的System.ServiceModel.Channels.PipeConnectionInitiator.GetPipeName(Uri uri,IPipeTransportFactorySettings transportFactorySettings)在System.ServiceModel.Channels.ConnectionPoolHelper.BuildConnection(TimeSpan超時)在System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan超時)在System.ServiceModel.Channels處的.TakeConnection(EndpointAddress地址,Uri通過,TimeSpan超時,TKey&鍵)。 System.ServiceModel.Channels.ServiceChannel.OnOpen處的CommunicationObject.Open(TimeSpan超時)
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan超時)處System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel通道,TimeSpan超時)處於System.ServiceModel.Channels處。 System.ServiceModel.Channels.ServiceChannel.Call處的ServiceChannel.CallOnceManager.CallOnce(TimeSpan超時,CallOnceManager級聯)(字符串操作,布爾型單向,ProxyOperationRuntime操作,Object [] ins,Object [] out,TimeSpan超時)在System.ServiceModel處。 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage消息)上的Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage方法調用,ProxyOperationRuntime操作)(IMessage消息)在[0]處引發了異常:在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg),位於Myprod.TestFacade.Interface.IScriptProcess.UnregisterProc的System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData,Int32類型) 在Program.KillProcess()上的ess(Int32 ProcessId,String taskId)。

誰能知道為什么它停止(WCF服務)?

首先,您必須知道net.pipes僅用於進程間通信(同一台機器上有2個進程)。 您還必須告訴我們有關您要做什么的更多詳細信息。 在您的說明中,您似乎正在使用兩台不同的機器,對嗎? 然后,您正在尋找管道的net.tcp替代( https://msdn.microsoft.com/en-us/library/ff649818.aspx

但是,如果不是這種情況,請嘗試向我們提供更多詳細信息,上下文和WCF配置文件是一個好的開始。

您沒有提供有關代碼或客戶端/服務器設置的很多詳細信息,所以我的回答將是一般性的。 如果它在您的計算機上運行正常,但在客戶端計算機上運行不正常,則可以檢查以下幾件事:

  1. 命名管道是一種用於完成進程間通信(IPC)的方法,其中(至少對於WCF而言) 您的命名管道服務器(在這種情況下,您的WCF服務)必須與客戶端在同一台計算機上 不過,作為附帶說明,可以使用命名管道在網絡上的計算機之間進行通信,但是WCF實施命名管道的情況並非如此,在這種情況下,服務器和客戶端必須限制在同一台計算機上。

  2. 您可以使用Process Explorerhttps://technet.microsoft.com/zh-cn/sysinternals/processexplorer.aspx )進行故障排除並確保命名的管道服務器端點處於活動狀態。 只需轉到查找->查找句柄或dll,然后使用命名管道的名稱進行搜索。 棘手的是,實際的命名管道名稱實際上是Windows生成的GUID。 請查看此有趣的文章,以了解如何獲取管道的實際名稱: https : //blogs.msdn.microsoft.com/rodneyviana/2011/03/22/named-pipes-in-wcf-are-named-但不是由您以及如何找到實際的Windows對象名稱/

  3. 您的服務器和客戶端是否在不同的安全上下文中運行? 查看Chris Dickson對以下SO問題的回答: 使用WCF netNamedPipeBinding時找不到命名管道 他解釋了為什么客戶機在不同的上下文中運行時為什么可能找不到命名管道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM