0

지금 당장 귀찮은 문제가 있습니다. Silverlight 4 응용 프로그램 (OOB이 기본적으로 실행 됨)이 있습니다. 서버와의 통신 수단으로 net.tcp와 함께 WCF를 사용합니다. 클라이언트는 wcf 클라이언트 프록시의 중앙 인스턴스를 사용합니다. 모든 것이 서버 측에서 계속 실행되는 한 모든 것이 잘됩니다.WCF net.tcp server disconnects - 클라이언트 측에서 올바르게 처리하는 방법?

내가 서버를 죽이면 클라이언트 측 (연결이 끊어 졌거나 채널 오류가 발생했음을 알리는 등)에서 예외가 발생하여 익사합니다.

이제 중앙 집중식으로 정리할 수있는 방법으로이를 처리 할 방법을 찾고 있습니다.

SL 응용 프로그램에는 응용 프로그램 시작시 초기화되는 App.cs (공용 정적 MyClient Client {get; set;})에있는 하나의 중앙 클라이언트 개체가 있습니다.

클라이언트 개체의 연결 문제를 올바르게 처리하는 방법을 알고 싶습니다.

답변

1

나는 중앙 집중식 솔루션은 아니지만 실행 가능하다고 생각합니다. try/catch 블록을 사용하여 코드를 어지럽히는 대신 event.Error 속성에 대한 null 체크 만 있으면됩니다. 연결에 문제가 발생하면이 속성은 항상 null이 아닙니다. 예외는 event.Result에 액세스하려고 시도 할 때만 발생합니다.

가장 아름다운 해결책은 아니지만 지금까지는 효과가있는 것처럼 보입니다.

아마도 ... 당신이 WCF 클라이언트 프록시의 중앙 인스턴스를 사용하고 있는지 당신이 언급

2

하지만 더 우아한 방법이있다.

이 경우 서버 오류가 발생하면 프록시는 오류 상태가됩니다. 상황을 중앙 집중화하기 위해 클라이언트 프록시를 ICommuicationObject으로 캐스팅하고 오류 처리 된 프록시를 대체하는 Faulted 이벤트에 이벤트 처리기를 연결하고 해당 이벤트가 발생하면 새 프록시로 처리 할 수 ​​있습니다.

리소스에 대한 중앙 액세스를위한 스레드 안전성에 대한 일반적인 경고가 적용됩니다!

+1

사실,이 블로그 게시물을 찾았습니다. http://nahidulkibria.blogspot.com/2008/05/knowing-when-wcf-service-in-fault-state.html –