2012-05-02 15 views
0

多くの操作を行うWCFサービスがあります。 各操作ごとに、メソッドの開始と終了時(ロギング時)に関数を実行したいと考えています。例えばwcf-serviceの各操作で呼び出しの開始と終了の関数

public Person FindPerson(string name) 
{ 
    Log("Start",...); 

    ... 

    Log("Stop",...); 
} 

が、これはWCFサービス内のすべてのメソッドのために実施することができること方法はありますか? beforeStart/afterEndイベントにある可能性がありますか?

答えて

1

このチュートリアルを確認してください:http://msdn.microsoft.com/en-us/magazine/cc163302.aspxあなたはIOperationInvokerインターフェイスに興味があります。 WCFは非常に拡張性があり、非常に複雑ですが、OperationInvokerは要件を満たす必要があります。もっと汎用的なアプローチを探しているなら、DI ContainerのInterception(もしあなたが使っているなら)を考えてみるか、特別なフレームワークを通してAOP機能を追加することを考えてください。 。

+0

ありがとう、私はIOperationInvoker – Mathieu

1

EMPIはそれに私を打つが、私はとにかくそれを投稿します:)

ロギングはAOPの典型的な候補です。

多くの依存性注入コンテナの1つを使用して、サービスと実行時のアプリケーションのインスタンス化を行うことができます。

postsharpを使用して、サービスの実装にログの側面を適用できます。開始するには、exampleを参照してください。あなたのコードは、次のようになります。

[Trace] 
public person FindPerson(string name) 
{ 
    //.... 
} 
1

私は多分それはあなたのためのオプションである、我々はそれをやっているかを伝えることができます。 これにはAOPスタイルの属性を使用していますが、自己開発コード(ポストシャープはありません)を使用しています。 PostSharpも同様に動作します。

次に、すべてのメソッド(リフレクション)をチェックして属性が追加されたことを確認するユニットテストがあります。

WCFをロギングに使用したくないため、この方法で行いました。属性ソリューションは一般的なので、他の場所でも利用できます。

関連する問題