我正在使用第三方的 Web 服务。我正在测量调用 Web 方法和定时网络流量所需的时间。我发现通话花费的时间比网络流量要长得多。
我运行应用程序并使用 fiddler 观察流量,打开 HTTP CONNECT 隧道需要 46 毫秒,发送数据需要 951 毫秒。我预计这个总数约为 1000 毫秒,但它的输出时间为 1504 毫秒。500 毫秒可能看起来不多,但这是从测试服务器完成的,从我们经常看到的实时服务器的响应时间为 6 秒,对于需要 1 秒的网络调用。
这是我用来测量 Web 方法调用时间的代码
Dim service As New SupplementaryEnquiryV1PortTypeClient()
Dim _stopWatch As New Stopwatch()
_stopWatch.Start()
response = service.Enquiry(request)
_stopWatch.Stop()
客户端用VB .NET编写,框架版本4.5
客户端是通过在 Visual Studio 中添加服务引用生成的,我也尝试使用 svcutil.exe 生成服务引用。
我相信 Web 服务是用 Java 编写的,但我无法访问代码。该服务返回有关单个车辆的数据,我假设这些数据是从数据库中提取的。
我尝试使用不使用 SSL 的服务端点,这没有任何区别。
我尝试将 System.ServiceModel.ClientBase(Of T) 上的 CacheSetting 属性设置为 AlwaysOff 和 AlwaysOn,但都没有任何区别。我还尝试将项目的“生成序列化程序集”设置为 On。
我使用 traceroute 检查任何与网络相关的问题。
从提琴手:
CONNECT uat-wss.xxx.co.uk:443 HTTP/1.1
ClientConnected: 15:23:20.011
ClientBeginRequest: 15:23:20.027
GotRequestHeaders: 15:23:20.027
ClientDoneRequest: 15:23:20.027
Determine Gateway: 0ms
DNS Lookup: 29ms
TCP/IP Connect: 18ms
HTTPS Handshake: 20ms
ServerConnected: 15:23:20.074
FiddlerBeginRequest: 15:23:20.074
ServerGotRequest: 15:23:20.074
ServerBeginResponse: 00:00:00.000
GotResponseHeaders: 00:00:00.000
ServerDoneResponse: 00:00:00.000
ClientBeginResponse: 15:23:20.074
ClientDoneResponse: 15:23:20.074
Overall Elapsed: 0:00:00.046
POST /TradeSoap/services/SupplementaryEnquiryV1/ HTTP/1.1
ClientConnected: 15:23:20.011
ClientBeginRequest: 15:23:20.105
GotRequestHeaders: 15:23:20.105
ClientDoneRequest: 15:23:20.464
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 15:23:20.074
FiddlerBeginRequest: 15:23:20.464
ServerGotRequest: 15:23:20.464
ServerBeginResponse: 15:23:20.479
GotResponseHeaders: 15:23:20.994
ServerDoneResponse: 15:23:21.041
ClientBeginResponse: 15:23:21.041
ClientDoneResponse: 15:23:21.057
Overall Elapsed: 0:00:00.951
编辑
正如 usr 所建议的,我已将代码放入探查器。我在 2012 年使用过内置的(见下文)。看起来 Microsoft.Xml.Serialization.ArrayOfObjectsSerializer1.Deserialize 占用了大量时间。什么可能导致这需要几秒钟?