WCF와 명명 된 파이프를 사용하는 간단한 IPC 메커니즘이 있습니다. 내 목표는 예외 정보 (스택 추적 포함)를 클라이언트에 로깅 목적으로 전파하는 것입니다 (나머지 응용 프로그램 로깅은 클라이언트에 있습니다).WCF FaultContract가 NamedPipe와 함께 실패 함
나는 예외 사항 클라이언트에 오류 예외 < 예외 >을 잡아 볼 수 있어요 다음 코드를 사용하는 경우 :
계약 :
[ServiceContract]
public interface IService
{
[OperationContract]
[FaultContract(typeof(Exception))]
void DoSomething();
}
구현 :
public class Service : IService
{
public void DoSomething()
{
try
{
ThisWillThrowAnException();
}
catch (Exception e)
{
throw new FaultException<Exception>(e);
}
}
}
클라이언트 :
public void CallServer()
{
try
{
proxy.DoSomething();
}
catch (FaultException<Exception> e)
{
Console.WriteLine("Caught fault exception!");
}
}
잘 작동하고 메시지가 콘솔에 인쇄 된 것을 볼 수 있습니다. 그러나 기본 Exception 클래스 대신 자체 파생 된 예외를 사용하려면 실패합니다.
사용자 정의 예외 :
new FaultException<MyException>(new MyException(e.Message, e);
변경 클라이언트 캐치 절에
typeof(MyException).
변경 서비스에 던져 절에
[Serializable]
public class MyException : Exception
{
public MyException() { }
public MyException (string message) : base(message) { }
public MyException (string message, Exception inner) : base(message, inner) { }
protected MyException (
SerializationInfo info,
StreamingContext context)
: base(info, context) { }
}
변경 IService.DoSomething에 FaultContract ~
catch (FaultException<MyException> e)
과 함께 CommunicationException이 catch됩니다. System.ServiceModel.CommunicationException : 파이프에서 읽는 중 오류가 발생했습니다. 파이프가 종료되었습니다. (109, 0x6d).
MyException 클래스는 클라이언트와 서버에서 모두 사용할 수있는 공유 라이브러리에 있습니다.
이 질문은 this question과 매우 비슷하지만 도움이되지 않았습니다.