0

多くの操作を行う WCF サービスがあります。操作ごとに、メソッドの開始時と終了時に関数を実行したいと思います(ロギング用)。

例えば:

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

    ...

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

これを wcf-service のすべてのメソッドに実装できる方法はありますか? 多分beforeStart/afterEndイベントで?

4

3 に答える 3

1

このチュートリアルを確認してください: http://msdn.microsoft.com/en-us/magazine/cc163302.aspx . あなたはIOperationInvokerインターフェースに興味があります。WCF は非常に拡張可能であり、非常に複雑でもありますが、OperationInvoker は要件を満たす必要があります。より一般的なアプローチを探している場合は、DI コンテナー (使用している場合) でインターセプトを検討するか、特殊なフレームワークを介して AOP 機能を追加することを検討してください。ポストシャープ

于 2012-05-02T09:44:58.787 に答える
1

Empi は私を打ち負かしましたが、とにかく投稿します :)

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

多くの依存性注入コンテナーの 1 つを使用して、ランタイムの側面のサービスとアプリケーションのインスタンス化を処理できます。

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

[Trace]
public person FindPerson(string name)
{
    //....
}
于 2012-05-02T09:49:24.117 に答える
1

私たちがどのようにそれを行っているかをお話しできます。おそらくそれはあなたにとってのオプションです。これには AOP スタイル属性を使用していますが、自己開発コードを使用しています (つまり、postsharp はありません...)。PostSharp も同様に機能します。

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

属性ソリューションはより一般的であるため、他の場所で利用できるため、ロギングに WCF を使用したくないため、このようにしました。

于 2012-05-02T09:50:16.643 に答える