多くの操作を行う WCF サービスがあります。操作ごとに、メソッドの開始時と終了時に関数を実行したいと思います(ロギング用)。
例えば:
public Person FindPerson(string name)
{
Log("Start",...);
...
Log("Stop",...);
}
これを wcf-service のすべてのメソッドに実装できる方法はありますか? 多分beforeStart/afterEndイベントで?
このチュートリアルを確認してください: http://msdn.microsoft.com/en-us/magazine/cc163302.aspx . あなたはIOperationInvoker
インターフェースに興味があります。WCF は非常に拡張可能であり、非常に複雑でもありますが、OperationInvoker は要件を満たす必要があります。より一般的なアプローチを探している場合は、DI コンテナー (使用している場合) でインターセプトを検討するか、特殊なフレームワークを介して AOP 機能を追加することを検討してください。ポストシャープ。
私たちがどのようにそれを行っているかをお話しできます。おそらくそれはあなたにとってのオプションです。これには AOP スタイル属性を使用していますが、自己開発コードを使用しています (つまり、postsharp はありません...)。PostSharp も同様に機能します。
そして、すべてのメソッド (リフレクション) をチェックして、属性が追加されたことを確認する単体テストがあります。
属性ソリューションはより一般的であるため、他の場所で利用できるため、ロギングに WCF を使用したくないため、このようにしました。