WCF 서비스를 사용하는 Silverlight 2 응용 프로그램이 있습니다. 따라서 서비스 메소드에 대한 모든 호출에 대해 비동기 콜백을 사용합니다. 이러한 호출 전이나 도중에 서비스가 실행 중이 아니거나 서비스가 중단되거나 네트워크가 중단되는 경우 예상대로 예외가 생성됩니다. 문제는이 예외를 잡는 방법을 모른다는 것입니다. 이 비동기 호출이기 때문에Silverlight에서 WCF 예외를 잡는 가장 좋은 방법은 무엇입니까?
, 나는이 try/catch 블록으로 통화를 시작 포장하고 프로그램이 그 시점에서에 이동 한 후 발생하는 예외를 선택할 수 없습니다.
서비스 프록시가 자동으로 생성되므로 EndInvoke (실제로 예외가 표시되는 곳)를 호출하는 모든 생성 된 함수에 try/catch 블록을 넣을 수 없습니다. 이러한 생성 된 함수는 호출 스택의 외부 코드에 의해 둘러싸이기 때문에 스택에 try/catch를 둘 수있는 아무 곳도 없습니다.
예외가 호출되기 전에 try/catch를 콜백 함수에 넣을 수 없습니다.
처리되지 않은 모든 예외를 캡처하는 App.xaml.cs에 Application_UnhandledException 함수가 있습니다. 나는 이것을 사용할 수는 있지만 그것을하는 것이 더러운 방법처럼 보인다. 차라리 예상치 못한 오류 (일명 버그)에 대해이 함수를 예약하고 특정 방식으로 처리하고 싶은 모든 상황에 대해이 함수에서 코드로 끝나지 않을 것입니다.
확실한 해결책이 없습니까? 아니면 Application_UnhandledException을 사용하여 붙어 있습니까?
[편집]
아래에서 언급했듯이 Error 속성은 내가 찾고있는 것입니다. 루프를 위해 나를 던지고있는 것은 예외가 던져져서 잡히지 않는 것처럼 보이지만 실행을 계속할 수 있다는 것입니다. Application_UnhandledException 이벤트를 트리거하고 VS2008이 실행을 중단 시키지만 디버거에서 계속하면 실행을 계속할 수 있습니다. 그것은 정말로 문제가 아니며 단지 이상하게 보입니다.
"서비스 메소드 콜백"은 메소드 완료 이벤트를 의미하며 콜백이 아닙니다. 콜백은 APM과 함께 사용되지만 실버 라이트는 EAP를 사용합니다. –
동의. 그에 따라 업데이트되었습니다. – dcstraw