2012-05-10 19 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 

障害がスローされるWCF方法は、FaultContract属性が施されていて、私はまた、HTTPレスポンスのステータスコードを変更しています

<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サービスを使用しています。それらも_use_ 'FaultException'ですか? –

答えて

0

サービスを飾るのにSilverlightFaultBehaviorを使用していますか?そうでない場合、これはあなたの質問に答えるかもしれません。

+0

どういう意味ですか?指定したリンク内のSilverlightFaultBehaviorは、BehaviorExtensionElementから派生し、例外がスローされた場合でもhttpステータスコード200を返すように作成および登録されたIEndpointBehaviorを実装するカスタムクラスの名前に過ぎません。 'System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = Net.HttpStatusCode.OK'ステートメントは同じことを行います。 – lollercoaster

+0

ASP.NETホストにSilverlight対応WCFサービスを追加すると、SilverLightFaultBehaviorクラスがプロジェクトに自動的に統合され、新しいサービスがそのサービスに関連付けられます。強く型付けされたフォルトは、この属性を削除していれば機能しています。属性を削除すると、作業が停止します。私はSilverlightFaultBehaviorの実装の詳細に疑問を呈したことはありません。 –

関連する問題