3

我们正在查看我们正在调用的 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 块来捕获该方法中的时间,但不认为这也记录了实际的序列化时间吗?

有人建议我可能必须实现自己的序列化程序(它只会记录时间然后调用默认的序列化程序),但只是想知道这是否是我唯一的选择?

任何想法都非常感谢。

4

4 回答 4

2

您可以使用自定义 SoapExtension。在 ProcessMessage() 方法中,可以看到 4 个事件,序列化前后和反序列化前后。在之前开始一个秒表,在之后结束它,然后将时间存储在某个地方。

于 2010-12-08T11:47:47.930 回答
0

围绕Stopwatch对象扭曲调用

从记忆里:

  Stopwatch sw = Stopwatch.Startnew();
  //stuff
  sw.Stop();
  print sw.ElapsedMilliseconds();
于 2010-12-08T11:45:58.297 回答
0

您不能使用服务跟踪查看器来检查每个请求需要多长时间吗?

于 2010-12-08T11:51:59.610 回答
0

您应该使用诸如Ants profiler之类的东西(一个 eval 版本会做)来分析这些有问题的方法。它会给你一个很好的洞察力。

于 2010-12-08T11:53:06.890 回答