2011-04-01 3 views
4

지금까지 ASP.NET MVC 응용 프로그램과 함께 사용하고있는 WCF 서비스 집합이 있습니다. 이 서비스 조작은 서버가 클라이언트가 제출 한 문제점을 식별 할 때 FaultException을 리턴합니다. 예를 들어 :Silverlight 4 및 ASP.NET의 WCF 오류 예외

if(string.IsNullOrEmpty(request.Name)) 
    throw new FaultException<ValidationDictionary>(new ValidationDictionary()); 

이 내 ASP.NET 응용 프로그램이 모두 실패 실버와 그러나

catch(FaultException<ValidationDictionary> fault) 
{ 
    // Happy error handling. 
} 

에서 잘 작동합니다. 서버는 faultexception (예상대로)이있는 500 개의 상태 코드를 반환하지만 Silverlight의 경우 더프 응답처럼 보입니다.

다음 MS 기사

은 (추한)이이 주변에 일을 나타냅니다 http://msdn.microsoft.com/en-us/library/ee844556%28v=vs.95%29.aspx 이 해결 방법은 실버 라이트 클라이언트가 그들을 얻을 수 있도록하는 오류 예외가 경우에도 서비스 전송 200 상태 코드를 만든다. 그러나 이것은 내 서비스 (내 ASP.NET 응용 프로그램, 야생에서 다른 사용자)의 '정상적인'고객을 망칠 것입니다.

그러나 서비스의 요점은 고객으로부터 분리되는 것입니다. 나는 여전히 내 서비스가 500 개의 상태 코드를 반환하여 내 ASP.NET 응용 프로그램이 FaultExceptions을 감지하고 처리 할 수 ​​있기를 원합니다. 그러나 실버 라이트도 그들을 처리 할 수 ​​있기를 바랍니다.

누구도이 문제에 대해 앞서 왔습니까?

답변

2

우리는 500-100 변환기 종료점 동작을 사용하고 있습니다 (제공된 링크의 옵션 중 하나). Silverlight에서 꽤 잘 작동합니다. 빠른 Windows 양식 클라이언트는 응답 코드가 200 (ok) 인 동안 e.Error가 올바르게 채워지는 것을 여전히 알고있는 것으로 나타납니다. 사용중인 클라이언트 (ASP.NET)와 200 대 500의 기술적 인 문제가 있습니까? 그렇지 않다면 무엇이 문제입니까?

저는 최근까지 Silverlight (MSDN 기사의 다른 옵션)에서 대체 HTTP 스택을 사용했습니다. 그 것을 사용하여 많은 것을 수정했습니다 (정확하게 리콜하면 오류를 반환합니다). 브라우저와 상관없이 일관된 NTLM/협상 인증을 제공 했으므로 사용하고있었습니다. HTTP 압축의 부족이 거래 차단기로 결정 되었기 때문에 사용을 중단해야했습니다. 이렇게하면 서비스가 변경되지 않습니다 (오류 발생시 500 초).

+0

나는 매우 못생긴 해킹처럼 보이지만 결과 코드를 변경하고 싶지 않고 다른 서비스 사용자를 혼란스럽게합니다. 메시지 전송 보안을 사용할 때 HTTP 스택 옵션에 대해 확신 할 수 없었고 이로 인해 문제가 발생할 수 있다고 생각했습니다. 압축 문제는 아마도 나에게 많은 문제가되지는 않지만, 성가시다. 그 해결책을 시도하고 내가 얼마나 멀리 나가는지 볼 것입니다. 감사. – James

+0

우리의 경우 보안은 대체 스택을 사용하여 더 잘 작동합니다. 나는 오히려 그 일에 매달 렸을 것이지만, 우리가 이야기하는 웹 서비스 중 하나는 많은 양의 데이터를 다시 우리에게 제공합니다. 그들은 HTTP 압축이 "무료"로 데이터를 처리 할 때 데이터 자체를 최적화하는 것을 꺼려했습니다. 당신은 전투를 선택해야합니다 ... – Aardvark

+0

이것은 당신의 의견을 보내 주셔서 감사합니다. – James