2011-07-12 8 views
2

私はこの件に関して決定的な答えを見出すことができます。私は、クライアントプロキシでusing(){}問題を認識しています。しかし、私たちは私たちのサービスから返されたすべての例外を食べているクライアントを持っています。例外が発生した後、クライアントはもうサービスと通信できません(私たちのサービストレースでは結果は得られません)。クライアントはWebアプリケーション(.NET 3.5)です。誰もこの行動を経験していますか?WCF basicHttpBindingサービスのクライアントプロキシでClose()/ Abort()を呼び出す必要がありますか?

public static bool ValidateDigitalSignatureCredentials(string barNumber, string PIN) 
{ 

    UserInfo userTicket = JTAC.INcite.Framework.Security.Authentication.CurrentUser; 
    DigitalSigning.DigitalSignatureClient client = null; 

    bool validSigning = false; 

    try 
    { 
     client = new DigitalSigning.DigitalSignatureClient(); 
     client.ClientCredentials.UserName.UserName = "foo"; 
     client.ClientCredentials.UserName.Password = "bar"; 
     validSigning = client.VerifyCredentials(barNumber, PIN); 

     if (client.State != CommunicationState.Faulted) 
     { 
      client.Close(); // (timeout); 
     } 
     else 
     { 
      client.Abort(); 
     } 
    } 
    catch (CommunicationException) 
    { 
     client.Abort(); 
    } 
    catch (TimeoutException) 
    { 
     client.Abort(); 
    } 

    return validSigning; 
} 
+0

クライアントステータスを確認します。フォールト状態ですか?それが再び開かれている場合。 – Asdfg

+0

あなたのクライアントをICommunicationObjectにタイプキャストして、まだタイムアウトしているかどうかを確認してください。また、フォールト状態になっている場合は、終了するよりもAbortを呼び出すことをお勧めします。それは確かではありません。 – Asdfg

+0

Visual Studioデバッガで "すべての例外を無効にする"を有効にして、例外が発生していることを正確に確認できます。ここでは、たとえば、クライアントが無効になる原因となっている他の種類の例外があるかどうか疑問に思っています。 –

答えて

0

いくつかの観測による/提案:

  1. 設定includeExceptionDetailInFaultsサービスの設定ファイルでtrueに - これは(FaultExceptionの例外を変換する必要があります。ここ

    は、クライアントコードがありますデバッグの場合のみ)。これは、configファイルのserviceDebug要素の動作セクションにあります。

  2. あなたのtryブロックでCommunicationStateにチェックを除去することによって、いくつかのコードを保存し、簡単に呼び出すことができます)

    client.Close(;

    エラーがスローされた場合、キャッチブロックはそれをキャッチしてチャネルを中止します。

  3. 手順1をしようとした場合、あなたは別のcatchブロックを追加したいかもしれませんが:

    キャッチ(FaultException)も { }

  4. 、私は(デバッグ目的)別の漁獲量を追加したいです

    キャッチ(例外) {}

0123:例外を処理するためにブロック

ほとんどの場合、サービスは処理されていない例外をスローしているため、通信チャネルに障害が発生します。うまくいけば私が上に置いたもののいくつかは、あなたがそれに対処することができるように例外が何であるかを判断するのに役立ちます。

関連する問題