2016-09-19 2 views
0

몇 가지 방법이있는 WCF 서비스가 하나 있습니다. 한 가지 방법 이름이 만든 Windows 프로세스를 종료 KilProcess()이며 코드net.pipe에서 수신하는 엔드 포인트가 없습니다. // localhost/MyService

public void KilProcess() 
{ 

    Process.GetCurrentProcess().Kill(); 
} 

그것은 내 컴퓨터에 있지만 클라이언트 머신 (높은 설정 기계)이 WCF 서비스가 중지지고에서 작업하고 예외를 던지고을 포함

2016년 9월 15일 16 : 08 : 11,789 INFO [표준 출력 (기본 작업-120) 1473948491783 SystemLog 1,473,948,491,078의 ScriptEngine가-이 net.pipe에서 듣고 더 엔드 포인트 없었다 : // localhost를 /이면 MyService 수 메시지 을 수락하십시오. 이는 종종 잘못된 주소 또는 SOAP 조치로 인해 발생합니다. 자세한 내용은 InnerException을 참조하십시오. 서버 스택 추적 : System.ServiceModel.Channels.PipeConnectionInitiator.GetPipeName (열린 우리당 URI, IPipeTransportFactorySettings transportFactorySettings)에서 System.ServiceModel.Channels.NamedPipeConnectionPoolRegistry.NamedPipeConnectionPool.GetPoolKey (EndpointAddress를 주소, 열린 우리당을 통해)에서 는 system.serviceModel에서 .Channels.CommunicationPool`2.TakeConnection (EndpointAddress를 어드레스, 열린 통해, 시간 범위의 제한, TKEY & 키) System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen에서 System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection (시간 범위 초과)에서 (TimeSpan 시간 초과) 시스템에서 System.ServiceModel.Channels.ServiceChannel.OnOpen (타임 아웃 시간 범위)에서 System.ServiceModel.Channels.CommunicationObject.Open
(시간 범위 초과)에서System.ServiceModel.Channels.CommunicationObject.Open (시간 범위 초과) .ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce에서 (ServiceChannel 채널, 타임 아웃 시간 범위) (시간 범위 초과, CallOnceManager 캐스케이드)에서 System.ServiceModel.Channels.ServiceChannel.Call (String action, 부울 oneway, ProxyOperationRuntime 작업, Object [] ins, System.ServiceModel.Channels.ServiceChannelProxy.InvokeService 에서 오브젝트 [] 아웃, 타임 아웃 시간 범위)에서 System.ServiceModel.Channels.ServiceChannelProxy.Invoke (IMethodCallMessage methodCall을, ProxyOperationRuntime 동작) (iMessage를 메시지)에서 예외 재 throw [0] : System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage Myprod.TestFacade에서 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke에서 (iMessage를 reqMsg, iMessage를 retMsg) (MessageData & msgData, INT32 타입)에서. Program.KillProcess()에서 Interface.IScriptProcess.UnregisterProcess (Int32 ProcessId, String taskId) ..

왜 (WCF 서비스) 중지인지 알 수 있습니까?

+0

오류 메시지는 분명합니다. 'net.pipe : // localhost/MyService'에서 듣고있는 엔드 포인트가 없습니다. 클라이언트가 서비스와 동일한 시스템에 있습니까 (net.pipe를 사용해야 함)? 연결할 때 서비스가 실행 중입니까? – Tim

답변

1

먼저 net.pipe는 프로세스 간 통신에만 사용된다는 것을 알아야합니다 (동일한 시스템에서 2 프로세스). 또한 무엇을하려고하는지 더 자세히 알려야합니다. 귀하의 설명에서 두 대의 다른 기계를 사용하고있는 것처럼 보입니다. 그물.파이프의 tcp insteed가 당신이 찾고있는 것입니다 (https://msdn.microsoft.com/en-us/library/ff649818.aspx)

만약 그렇다고 생각되지 않는다면 우리에게 더 자세한 내용을 알려주십시오. 컨텍스트와 WCF 설정 파일이 좋은 시작입니다.

0

코드 또는 클라이언트/서버 설정에 대한 세부 정보를 제공하지 않았기 때문에 일반적인 대답이 될 수 있습니다. 그것은 당신의 컴퓨터에 있지만 클라이언트 시스템에 벌금을 실행중인 경우, 물건의 여기 몇 당신은 확인할 수 있습니다

  1. 명명 된 파이프는 적어도 (프로세스 간 통신 (IPC)를 달성하기위한 방법입니다 WCF의 경우 명명 된 파이프 서버 ( 이 경우 WCF 서비스)는 클라이언트과 동일한 컴퓨터에 있어야합니다. 그러나 참고로 명명 된 파이프는 네트워크에서 컴퓨터간에 통신하는 데 사용할 수 있지만 서버 및 클라이언트가 동일한 컴퓨터로 제한되어야하는 명명 된 파이프의 WCF 구현에는 해당되지 않습니다. 당신은 문제를 해결하고 명명 된 파이프 서버 엔드 포인트가 살아 있는지 확인하는 프로세스 탐색기 (https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx) 을 사용할 수 있습니다

  2. . 찾기 -> 찾기 핸들 또는 dll로 이동하여 명명 된 파이프의 이름을 사용하여 검색하십시오. 까다로운 부분은 이며 실제로 실제 명명 된 파이프 이름은 Windows에서 생성 된 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. 는 서버와 클라이언트가 서로 다른 보안 컨텍스트에서 실행되는 ? 이 SO 질문에 대한 Chris Dickson의 답변을 확인하십시오 : Named pipe not found when using WCF netNamedPipeBinding. 그는 클라이언트가 다른 컨텍스트에서 실행중인 경우 명명 된 파이프를 찾지 못할 수도있는 이유에 대해 설명합니다.

관련 문제