我们正在调查我们正在调用的Web服务的一些性能问题。 我已经设法在整个实际的Web服务方法中放置时间记录代码,但现在它看起来好像序列化结果集所需的实际时间可能是一个问题?
所以我希望记录这些数据的序列化时间,但我很难获得任何结果..
以下是我们提供的示例Web服务方法:
[AuthExtension]
[WebMethod]
[SoapHeader("AuthHeader", Direction = SoapHeaderDirection.In)]
public ResultSet CheckAvailability(FareSelections fareSelections)
{
ResultSet results = null;
results = Logic.CheckAvailability(fareSelections, AuthHeader.Token, timeLogger);
return results;
}
我试过,在返回的类中放置用[OnSerializing()]和[OnSerialized()]属性修饰的方法,但这不起作用。我还试图通过使用try..finally块来捕获方法中的时序,但是不要认为这是在记录实际的序列化时间吗?
有人建议我可能必须实现自己的序列化程序(它只会记录时间,然后再调用默认的序列化程序),但只是想知道这是否是我唯一的选择?
非常感谢任何想法。
答案 0 :(得分:2)
您可以使用Custom SoapExtension。在ProcessMessage()方法中,您可以看到4个事件,序列化之前和之后以及反序列化之前和之后。在Befores中启动秒表,在Afters上结束秒表,然后将时间存放在某个地方。
答案 1 :(得分:0)
围绕Stopwatch对象
扭曲调用来自记忆:
Stopwatch sw = Stopwatch.Startnew();
//stuff
sw.Stop();
print sw.ElapsedMilliseconds();
答案 2 :(得分:0)
无法使用服务跟踪查看器检查每个请求的持续时间吗?
答案 3 :(得分:0)
你应该使用像Ants profiler这样的东西(eval版本会这样做)来描述那些有问题的方法。它会给你一个很好的洞察力。