2011-01-20 4 views
1

私はこの共通のエラーをスローしたWCFクライアントを持っています。ただサーバーへのHTTP呼び出しを再試行して解決するだけです。この例外の価値があるものについては、1分以内に生成されませんでした。それは3秒で生成されました。失敗した場合、どのWCF例外を再試行する必要がありますか? (偽のxxxホストが00:01:00の間に応答を受け取らなかったなど)

構成されたタイムアウト(午前0時01分00秒)以内に応答を受信しなかった をXXXXXXに送信された要求操作。この操作に割り当てられた時間が の場合、 のタイムアウト時間の一部が になっている可能性があります。これは、 サービスがまだ 操作を処理しているか、またはサービスが の返信メッセージを送信できなかったためです。 は(IContextChannelにチャネル/プロキシ をキャストし、 OperationTimeoutプロパティを設定することによって)操作 タイムアウトを増やし、サービスがどのように専門家がこれらを処理しているクライアントに に

を接続することが可能であることを を確実に検討してください一般的なWCFエラー?他にどのような偽のエラーを扱うべきですか?

たとえば、私はWCF呼び出しのタイミングを検討していますが、上記の(偽の)エラーが55秒未満でスローされた場合は、whileループを使用して操作全体を再試行します。私はチャンネル全体をリセットしなければならないと信じていますが、私はあなたたちが何をするのが正しいか教えてくれることを願っています。

+0

3分後に1分のタイムアウトタイムアウトが発生する理由について別の質問をすることをお勧めします。それは実際にそれが動作する方法ではありません。 –

+0

@ジョン:私のAzure Fabricを立ち上げて開発している間は、それは間違いない。私はこれが再試行可能なエラーであると推測しています。私のコードのほとんどは、WCFサンプル全体に基づいています。 – LamonteCristo

+0

Azureの要因は、別の質問をするのに十分な理由です。 –

答えて

1

他にどのような私は私のWCFのすべての例外と潜在的な退職を扱う声明「を使用して」カスタムから呼び出しを行います。私のコードでは、オプションでポリシーオブジェクトを文に渡すことができるため、エラー時に再試行したくない場合など、簡単に動作を変更できます。

次のようにコードの要旨は次のとおりです。

[MethodImpl(MethodImplOptions.NoInlining)] 
public static void ProxyUsing<T>(ClientBase<T> proxy, Action action) 
    where T : class 
{ 
    try 
    { 
     proxy.Open(); 
     using(OperationContextScope context = new OperationContextScope(proxy.InnerChannel)) 
     { 
      //Add some headers here, or whatever you want 
      action(); 
     } 
    } 
    catch(FaultException fe) 
    { 
     //Handle stuff here 
    } 
    finally 
    { 
     try 
     { 
      if(proxy != null 
       && proxy.State != CommunicationState.Faulted) 
      { 
       proxy.Close(); 
      } 
      else 
      { 
       proxy.Abort(); 
      } 
     } 
     catch 
     { 
      if(proxy != null) 
      { 
       proxy.Abort(); 
      } 
     } 
    } 
} 

次のようにあなたは、呼び出しを使用することができます。

ProxyUsing<IMyService>(myService = GetServiceInstance(),() => 
{ 
    myService.SomeMethod(...); 
}); 

をNoInliningコールは、おそらくあなたのために重要ではありません。私はそれが必要です。なぜなら、例外後にコールスタックを記録するいくつかのカスタムロギングコードがあるから、その場合、そのメソッド階層を保持することが重要です。

+0

これは参考になりますが、例外を捕まえるにはどのような例外があり、どのような状況でその価値があるのか​​を知りたいと思っています – LamonteCristo

関連する問題