异步WCF服务和呼叫持续时间性能计数器

时间:2013-05-29 22:28:00

标签: c# wcf asynchronous async-await performancecounter

我正在尝试为WCF服务方法测量呼叫持续时间性能计数器。

我有一个非常简单的WCF服务,如下所示。

服务界面:

[ServiceContract]
public interface IFooService
{      
    [OperationContract]
    string DoSomeExpensiveOperation();
}

服务实施:

public class FooService : IFooService
{

    public string DoSomeExpensiveOperation()
    {
        Thread.Sleep(3000);
        return "Some valuable information";         
    }

}

当实现是同步的时(如上所述),我可以看到填充的呼叫持续时间。

但是,当服务实现是异步的时(如下所示),不会填充任何内容。

服务界面:

[ServiceContract]
public interface IFooService
{       
    [OperationContract]
    Task<string> DoSomeExpensiveOperation();

}

服务实施:

public class FooService : IFooService
{        
    public async Task<string> DoSomeExpensiveOperation()
    {
        Thread.Sleep(3000);
        return await Task.FromResult("Some expensive value");
    }
}

我甚至尝试在等待之后发布自定义性能计数器。即使这样也行不通。

感谢是否有人可以对此有所了解。

谢谢!

1 个答案:

答案 0 :(得分:0)

异步调用(操作/服务或端点)不支持呼叫持续时间。 其他WCF计数器仍然有效但不是这个。

来自MSDN

  

在异步WCF服务上使用“呼叫持续时间”计数器   将始终返回-1。