2

私はこの主題について決定的な答えを見つけることができるようです。クライアントプロキシのusing(){}の問題を認識しています。しかし、サービスから返されたすべての例外を処理しているクライアントがあり、例外が発生した後、クライアントはサービスと通信できなくなったようです(サービストレースで結果が得られません)。クライアントはWebアプリケーション(.NET 3.5)です。誰かがこの行動を経験したことがありますか?

クライアントコードは次のとおりです。

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;
}
4

1 に答える 1

0

いくつかの観察/提案:

  1. サービスの構成ファイルでincludeExceptionDetailInFaultsを true に設定します。これにより、例外が FaultException に変換されます (デバッグにのみ使用する必要があります)。これは、設定ファイルの動作セクションの serviceDebug 要素にあります。

  2. try ブロックで CommunicationState のチェックを削除し、次のように呼び出すだけで、いくつかのコードを節約できます。

    client.Close();

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

  3. ステップ 1 を試す場合は、別の catch ブロックを追加することをお勧めします。

    キャッチ (FaultException) { }

  4. また、例外を処理する別の catch ブロックを (デバッグ目的で) 追加します。

    キャッチ (例外) { }

ほとんどの場合、サービスは未処理の例外をスローしており、通信チャネルに障害が発生しています。上記の内容の一部が、例外が何であるかを判断して対処できるようになることを願っています。

于 2011-07-12T17:15:19.157 に答える