我正在使用來自第三方的Web服務。我正在測量調用Web方法和計時網絡流量所需的時間。我發現通話時間比網絡流量長得多。使用.NET服務引用調用Web服務的開銷是多少?
我運行應用程序並使用提琴手來觀察流量,它需要46ms來打開HTTP連接隧道和951ms來發送數據。我預計這個總數大約爲1000毫秒,但是它會以1504毫秒出現。 500毫秒可能看起來並不多,但是這是通過測試服務器完成的,從我們經常看到的響應時間爲6秒的活動服務器完成,對於需要1秒鐘的網絡通話。
這是我使用來衡量網絡的方法調用
Dim service As New SupplementaryEnquiryV1PortTypeClient()
Dim _stopWatch As New Stopwatch()
_stopWatch.Start()
response = service.Enquiry(request)
_stopWatch.Stop()
客戶端是用VB寫的.NET時間4.5
通過加入生成的客戶端的代碼,Framework版本在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佔用了很多時間。什麼可能導致這需要幾秒鐘?
Web服務做什麼?它可能是處理數據和/或訪問需要時間在服務器上的數據庫嗎?另外,你的小提琴手從開始到回覆的痕跡是什麼樣的?握手的46 ms結束,最後發送的數據包的951 ack,第一個迴應包,???最後一個響應包的確認? (以及發送和響應數據有多大?) – 2013-07-02 13:42:10
我已經更新了問題以包含提琴手響應。我對Web服務的作用並不是很感興趣,因爲我無法控制這一點。我想知道爲什麼需要這麼長時間才能創建SOAP請求並接收SOAP響應。 – user1069816
打開一個分析器,或在滿載情況下將調試器暫停10次。在代碼花費時間的地方回答問題非常簡單。 – usr