2012-08-14 4 views
0

저는 WCF를 배우며 책에서 배운 것과 다른 예를 시도하고 있습니다. 이 방법은 처리되지 않은 예외가 발생 호출 될 때WCF 프록시는 사용시에만 오류가 발생합니다.

var baseTcpAddress = new Uri("net.tcp://localhost/hello"); 

var tcpBinding = new NetTcpBinding(); 

// Create client channel. 
ChannelFactory<ITestService> factory = new ChannelFactory<ITestService>(tcpBinding, new EndpointAddress(baseTcpAddress)); 
var channel = factory.CreateChannel(); 

var commObject = channel as ICommunicationObject; 

commObject.Faulted += commObject_Faulted; 
commObject.Closed += commObject_Closed; 

:

[ServiceContract] 
interface MyService 
{ 
    [OperationContract(IsOneWay = true)] 
    void Throws(); 
} 

내 클라이언트 코드가 프록시를 생성하기 위해 ChannelFactory에 클래스를 사용하고 다음과 같이

나는 간단한 서비스 설정을 가지고 (FaultException에서 파생되지 않음) 동일한 프록시를 사용하는 후속 호출에서 예외가 발생하고 채널에 오류가 발생합니다.

문제는 내가 프록시 채널의 폴트 이벤트에 등록하고,하지만 난 어떤 통지를받지 오전, 프록시 액세스를 시도.

제 질문은 - 클라이언트가 어떻게 장애 프록시에서 자신을 보호 할 수 있습니까? 프록시가 클라이언트에게 시도하고 사용하는 대신 사용할 수 없다고 클라이언트에게 알리지 않아야합니까?

답변

0

"문제"는 방법이 일방적이라는 것입니다. 어느 정도는 이것이 화재이며 잊어 버릴 수 있습니다 (세션을 따로두기). 예외가 발생하면 클라이언트는이를 알 수 없습니다. 클라이언트 측에서 요청은 다른 쪽에서 수신 된 즉시 성공합니다 (이 아니며 처리 됨).

처음 시도 할 때와 동일하게 시도해 보시기 바랍니다.

또한 오류가 발생한 이벤트에 가입하는 데 사용한 코드를 게시하십시오. 어떤 호스팅을 사용하고 있습니까? 어떻게 프록시를 만드는거야? (ChannelFactory?)

ServiceHost (있는 경우)의 Faulted 이벤트를 구독하고이 이벤트가 발생하는지 확인할 수 있습니다.

또한 프록시 상태를 쿼리 해 보셨습니까?

또한 this question을 참조하십시오. 귀하의 답변을 얻으실 수 있습니다.

건배

+0

클라이언트 + 이벤트 후킹 설정 방법에 대한 내 질문이 업데이트되었습니다. 나는 또한 프록시의 상태를 쿼리 해봤는데, 항상 Opened를 리턴했다. –

+0

좋아요. ServiceHost.Faulted에 가입을 시도 했습니까? 또한, 단방향으로 시도 했습니까? – Vitaliy

+0

예, 아무것도 없습니다. –