1

Silverlightクライアントで、WCF呼び出し中にサーバーで発生した例外を表示できるようにしたいと思います。

(クライアント上で)WCFチャネルを作成するための現在のコードを考えると:

// create the binding elements
BinaryMessageEncodingBindingElement binaryMessageEncoding = new BinaryMessageEncodingBindingElement();
HttpTransportBindingElement httpTransport = new HttpTransportBindingElement() { MaxBufferSize = int.MaxValue, MaxReceivedMessageSize = int.MaxValue };

// add the binding elements into a Custom Binding
CustomBinding customBinding = new CustomBinding(binaryMessageEncoding, httpTransport);

// create the Endpoint URL 
EndpointAddress endpointAddress = new EndpointAddress(serviceUrl);

            // create an interface for the WCF service
ChannelFactory<TWcfApiEndPoint> channelFactory=new ChannelFactory<TWcfApiEndPoint>(customBinding, endpointAddress);
channelFactory.Faulted += new EventHandler(channelFactory_Faulted);         
TWcfApiEndPoint client = channelFactory.CreateChannel();

return client;

例外が発生すると、「NotFound」例外が発生しますが、これは明らかに役に立ちません。例外情報を取得するにはどうすればよいですか?

このコードを使用して、上記で返されたクライアントオブジェクトを使用します。

try
{
// customFieldsBroker is the client returned above
        customFieldsBroker.BeginCreateCustomField(DataTypeID, newCustomField, (result) =>
        {
            var response = ((ICustomFieldsBroker)result.AsyncState).EndCreateCustomField(result);

    }, customFieldsBroker);
}
catch (Exception ex)
{
    // would like to handle exception here
}

begin/End呼び出しをtry{}catch {}ブロックでラップしても、catch{}ブロックにジャンプすることはないようです。

重要な場合は、クライアントでSilverlight3を使用しています。

4

2 に答える 2

0

ブラウザサンドボックスのセキュリティ制限により、Silverlightはサーバーエラーの本体(ステータスコード500)を認識できません。これを機能させるには、サーバー側に変更を加えて、ブラウザーに障害を返す方法を変更する必要があります。それを詳細に説明しているMSDNの記事があります。

于 2009-09-24T17:11:14.027 に答える
0

あなたは2つのことをする必要があります:

  • 契約の一部として障害例外を宣言する
  • 例外を障害例外としてスローする

    【OperationContract】

    [FaultContract(typeof(ArithmeticFault))]

    public intCalculate(操作op、int a、int b)

    {// ...}

    新しいFaultException();をスローします。

于 2009-09-24T17:20:24.290 に答える