サードパーティの Web サービスを利用しています。Web メソッドの呼び出しにかかる時間を測定し、ネットワーク トラフィックのタイミングを計っています。ネットワーク トラフィックよりも通話にかなりの時間がかかることがわかりました。
アプリを実行し、フィドラーを使用してトラフィックを監視したところ、HTTP CONNECT トンネルを開くのに 46 ミリ秒、データを送信するのに 951 ミリ秒かかりました。この合計は約 1000 ミリ秒になると予想されますが、実際には 1504 ミリ秒になります。500 ミリ秒はそれほど多くないように思えるかもしれませんが、これはテスト サーバーから行われました。ライブ サーバーからは、1 秒かかるネットワーク コールに対して 6 秒の応答時間が定期的に見られます。
これは、Web メソッド呼び出しの時間を測定するために使用しているコードです。
Dim service As New SupplementaryEnquiryV1PortTypeClient()
Dim _stopWatch As New Stopwatch()
_stopWatch.Start()
response = service.Enquiry(request)
_stopWatch.Stop()
クライアントは、VB .NET、Framework バージョン 4.5 で記述されています。
クライアントは、Visual Studio でサービス参照を追加することによって生成されました。また、svcutil.exe を使用してサービス参照を生成しようとしました。
Web サービスは Java で書かれていると思いますが、コードにアクセスできません。このサービスは、データベースから引き出されたと思われる 1 台の車両に関するデータを返します。
SSL を使用していないサービス エンドポイントを使用してみましたが、違いはありませんでした。
System.ServiceModel.ClientBase(Of T) の CacheSetting プロパティを AlwaysOff と AlwaysOn に設定しようとしましたが、どちらも違いはありませんでした。また、プロジェクトの「シリアル化アセンブリの生成」をオンに設定しようとしました。
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 に多くの時間がかかっているようです。これに数秒かかる原因は何ですか?