質問

私はWCFサービスでアプリケーションのすべての相互作用を処理するクラスを持っています。MSDNは、WCFを使用した_ステートメントの使用の使用が悪いと言っているようです。 /msdn.microsoft.com/en-us/library/aa355056.aspx)

私の問題は、彼らの提案された実装方法は、同じ構造コードを持つ10の方法[私のサービスに10のパブリックメソッドとして]を持っていることを意味することです。 :

try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (CommunicationException)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
}
catch (TimeoutException)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
}
catch (Exception ex)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
    throw;
}

これにはまだロギングはありませんが、もちろんログのログを開始するようになったら、ほぼ10の異なる場所にログ作業を追加する必要があります

ここでコードを再利用する際にもう少し機知に富んでいる方法についてのヒントはありますか

ありがとう

ポール

役に立ちましたか?

解決

ロギング、再スローなどの基本的な例外処理処理を実際の処理場所から切り離すことができる、汎用の構成可能な例外処理コンポーネントを使用します。このようなコンポーネントの一例は、Microsoftの例です 例外処理アプリケーションブロック.

その後、次のようなコードになります。

try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (Exception ex)
{
    _client.CloseIfNeeded();
    if (!ex.Handle("Wcf.Policy")) throw;
}

どこ CloseIfNeeded WCFチャネルの閉鎖ロジックをカプセル化するカスタム拡張メソッドを示し、 Handle 例外メソッドは、この場所に適用される例外ポリシーの名前を渡す例外処理メカニズムを呼び出します。

ほとんどの場合、例外処理ロジックを適切な1行または2行のコードに減らすことができ、いくつかの利点が得られます。

  • 例外処理動作の即時構成可能性(ポリシー)
  • 特定のタイプの例外と例外ポリシーにバインドされたカスタム例外ハンドラーを使用した拡張性
  • コードの管理可能性と読みやすさ
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top