0

次の WCF サービス コントラクトがあります。

[ServiceContract(Namespace = "http://example.com", Name = "Service1")]
public interface IService1
{      
  [OperationContract]
  [FaultContract(typeof(Fault1))]
  ValidateUserResult ValidateUser(
                       string username, 
                       string password);
}

[ServiceContract(Namespace = "http://example.com", Name = "Service1")]
public interface IService1Async
{      
    [OperationContract(AsyncPattern = true)]
    [FaultContract(typeof(Fault1))]
    IAsyncResult BeginValidateUser(
                       string username, 
                       string password, 
                       AsyncCallback callback, 
                       object userState);

    ValidateUserResult EndValidateUser(IAsyncResult asyncResult);
}

[DataContract(Namespace = "http://example.com")]
public class Fault1
{
}

クライアント側で ValidateUser の非同期バージョンを呼び出しており、サーバーで をスローしFaultException<Fault1>ていますが、クライアントが受け取るのは base だけFaultExceptionです。

契約で指定された障害が受信されない理由は何ですか?

4

2 に答える 2

1

理由がわかりました。ProvideFaultメソッドを使用してサービス動作から障害を生成しています。そこで、msdnのIErrorHandler.ProvideFaultの例と同様のコードを使用します

唯一の違いは、オーバーロードに対して適切なアクションを渡していないことMessage.CreateMessageです。手動で障害と出来上がりをスローした場合に生成されるものを正確にコピーしました。

その最後の詳細を与えなかった私の言い訳:-)

于 2010-04-09T16:57:14.217 に答える
0

あなたの呼び出しの catch ステートメントを見せてもらえますか? 契約とすべてが私には問題ないように見えます...

どの順番で不具合をチェックしますか?? またはをチェックするFaultException<Fault1> 前にチェックする必要があります-その順序が何らかの形で混同されている可能性はありますか?FaultExceptionCommunicationException

メソッドの同期バージョンを呼び出すと機能しますか?

于 2010-04-09T15:53:43.777 に答える