2

我正在尝试测量WCF 服务方法的Calls Duration性能计数器。

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

服务接口:

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

服务实现:

public class FooService : IFooService
{

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

}

当实现是同步的(如上所示)时,我可以看到 Calls Duration 正在填充。

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

服务接口:

[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");
    }
}

我什至尝试在等待之后发布自定义性能计数器。即使这样也没有用。

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

谢谢!

4

1 回答 1

0

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

来自MSDN

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

于 2013-06-07T07:27:00.813 回答