2012-12-03 4 views
0

클라이언트 서버 WCF 이중화 시나리오에서 클라이언트 측에서 오류가 발생했음을 서버에 알리는 권장 방법은 무엇입니까? 서버가 클라이언트 중 하나에게 특정 작업을 수행해야하며 클라이언트 측에서 예외가 발생 함을 알리는 경우를 가정 해 보겠습니다. 콜백 인터페이스에 WCF 이중화 시나리오 - 서버에 클라이언트 오류가 있음을 알리는 메시지

, 내가 가진 가장 좋은 방법 무엇이

[OperationContract(IsOneWay = true)] 
void Work(...); 

같은 :

  1. 클라이언트가 사용자에게 알려 호출 할 수있는 NotifyServer(int clientId, string message) 메시지를 구현 요청 된 작업이 실패했습니다.
  2. 운영 계약서에 IsOneWay = false을 설정하면 UI 응답 성을 유지하기 위해 BackgroundWorker 스레드에서 모든 클라이언트를 호출해야합니까?
  3. 서버에서 비동기 작업을 구현 하시겠습니까? 어떻게 작동할까요? 클라이언트에서 비동기 작업을 생성 할 수 있습니까? 클라이언트 콜백 메소드에 동일한 패턴 (BeginWork, EndWork)을 사용해야합니까?

IsOneWay = true이 작동하지 않을 때 클라이언트 측에 FaultException을 던지기 때문에 다른 것을 생각할 수 없습니다.

어떤 조언이 필요합니까?

미리 감사드립니다.

답변

0

광고 1. Work()가 예측할 수없는 시간이 걸릴 수 있고 그 전화에서 서버 스레드가 멈추지 않게하려면 그 방법이 좋습니다.

Ad 2. 항상 백그라운드 작업자와 UI 스레드 내에서 WCF 작업을 수행해야합니다. IsOneWay = False로 설정하면 Work() 메서드가 원격에서 실행을 완료 할 때까지 서버에서 차단됩니다. 클라이언트와 결과를 반환합니다. 그러나 isOneWay = true로 설정하더라도 메서드는 여전히 저수준 WCF 통신을 차단합니다. WCF 연결이 끊어지면 알림을 받기 전에 시간이 오래 걸릴 수 있습니다.

광고 3 패턴은 귀하에게 달려 있습니다. 예 : MSDN: OperationContractAttribute.AsyncPattern Property

최상의 해결책이 존재하지 않습니다. 모든 것은 설정 (클래스, 스레드 등)에 따라 다릅니다. 코드를 작성하는 WCF 레이어는 사용하기 쉽고 편리해야합니다. 이것이 바로 기본 가이드 라인입니다.

관련 문제