2012-05-10 1 views
1

WCF 서비스에서 Silverlight 클라이언트로 강력하게 형식화 된 FaultExceptions를 전달하려고 시도하지만 일반적으로 "원격 서버가 오류를 반환했습니다 : NotFound"입니다. 응답, 일반 FaultExceptions 던져 동일한 코드를 사용하여 잘 작동합니다.강력하게 형식화 된 FaultExceptions이 작동하지 않습니다.

따라서 Throw New FaultException()을 수행하면 Silverlight 콜백의 e.Error 매개 변수가 반환되고 Throw New FaultException(Of clsServiceFault)(clsServiceFaultInstance) 오류는 찾을 수 없습니다.

clsServiceFault 아직 같은 데이터 계약으로 선언 된

:

<DataContract()> _ 
Public Enum ServiceFaultTypes 
    LoginFailed 
    SessionExpired 
End Enum 

<DataContract()> _ 
Public Class clsServiceFault 

    Public Sub New() 
    End Sub 

    Public Sub New(iType As ServiceFaultTypes, iMessage As String) 
     Type = iType 
     Message = iMessage 
    End Sub 

    <DataMember()> _ 
    Public Property Type As ServiceFaultTypes 

    <DataMember()> _ 
    Public Property Message As String 

End Class 

오류가 FaultContract 속성으로 장식되어 발생합니다 나는 또한 HTTP 응답 상태 코드를 변경있어하는 WCF 방법

<OperationContract()> _ 
<FaultContract(GetType(clsServiceFault))> _ 
Public Function GetCustomersData(...) 

... 
System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = Net.HttpStatusCode.OK 
Throw New FaultException() 'Works 
Throw New FaultException(Of clsServiceFault)(new clsServiceFault(..)) 'Does not work 
... 
End Function 

무엇이 여기에 있습니까?

+0

REST 서비스를 사용 중입니다. 그것들도'FaultException'을 사용합니까? –

답변

0

서비스를 꾸미기 위해 SilverlightFaultBehavior을 사용합니까? 그렇지 않으면 귀하의 질문에 대한 답변이 될 수 있습니다.

+0

무슨 뜻인가요? 제공 한 링크의 SilverlightFaultBehavior는 BehaviorExtensionElement에서 파생 된 사용자 정의 클래스의 이름이며 Exception이 발생하더라도 http 상태 코드 200을 반환하도록 작성되고 등록 된 IEndpointBehavior를 구현합니다. 'System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = Net.HttpStatusCode.OK' 문도 똑같습니다. – lollercoaster

+0

ASP.NET 호스트에 Silverlight 사용 가능 WCF 서비스를 추가하면 SilverLightFaultBehavior 클래스가 자동으로 프로젝트에 통합되고 새 서비스가이 서비스와 함께 사용됩니다. 이 특성을 제거하는 한 강력한 형식의 결함이 작동합니다. 속성을 제거하면 작업이 중단됩니다. SilverlightFaultBehavior의 구현 세부 사항에 대해서는 질문하지 않았습니다. –