これは、アスペクトに最適な場所です。ポストシャープをチェックしてください。
次に、次のようなアスペクトを作成できます。
/// <summary>
/// Adds execution timing and automatic logging to the tagged method
/// </summary>
[Serializable]
public class MethodTimeAttribute : OnMethodBoundaryAspect
{
private String MethodName { get; set; }
private DateTime StartTime { get; set; }
/// <summary>
/// Method executed at build time. Initializes the aspect instance. After the execution
/// of <see cref="CompileTimeInitialize"/>, the aspect is serialized as a managed
/// resource inside the transformed assembly, and deserialized at runtime.
/// </summary>
/// <param name="method">Method to which the current aspect instance
/// has been applied.</param>
/// <param name="aspectInfo">Unused.</param>
public override void CompileTimeInitialize(MethodBase method, AspectInfo aspectInfo)
{
MethodName = method.DeclaringType.FullName "." method.Name;
}
public override void OnEntry(MethodExecutionArgs args)
{
StartTime = DateTime.Now;
}
public override void OnExit(MethodExecutionArgs args)
{
Log.Debug(this, "Method {0} took {1} to execute", MethodName, DateTime.Now - StartTime);
}
}
そして、あなたがしなければならないのは、このようにあなたのメソッドにタグを付けることです:
[MethodTime]
private void RunFor(TimeSpan runTime){
// do stuff
}
高度なポストシャープ機能にはライセンスが必要ですが、メソッド境界の側面などの単純な機能は無料です。
これはwcfサービスのネットワーク境界をテストしませんが、サービスの実装時間をテストします。
本当に必要な場合は、カスタム動作を作成し、それをWCFチェーンに挿入してタイミングをテストできますが、そのフェーズでボトルネックが発生する可能性はほとんどありません。より可能性が高いのは、大量のデータを送信しているために処理が遅いか、実装の処理が遅いことです。これらはすべて、サーバー側またはクライアント側で個別にテストできます。