SoapHttpClientProtocolを継承して、VS2008 .Net 3.5で生成された従来のC#Webサービスクライアントを使用しています。これは、Javaで記述されたリモートWebサービスに接続しています。
すべての構成はクライアントの初期化中にコードで行われ、以下で確認できます。
ServicePointManager.Expect100Continue = false;
ServicePointManager.DefaultConnectionLimit = 10;
var client = new APIService
{
EnableDecompression = true,
Url = _url + "?guid=" + Guid.NewGuid(),
Credentials = new NetworkCredential(user, password, null),
PreAuthenticate = true,
Timeout = 5000 // 5 sec
};
すべて正常に機能しますが、最も単純なメソッド呼び出しの実行にかかる時間は、ネットワークのping時間のほぼ2倍です。Javaテストクライアントはネットワークのping時間とほぼ同じですが、次のようになります。
C# client ~ 550ms
Java client ~ 340ms
Network ping ~ 300ms
セッションのTCPトラフィックを分析した後、次のことがわかりました。
基本的に、C#クライアントは次の順序でTCPパケットを送信しました。
Client Send HTTP Headers in one packet.
Client Waits For TCP ACK from server.
Client Sends HTTP Body in one packet.
Client Waits For TCP ACK from server.
Javaクライアントは、次の順序でTCPパケットを送信しました。
Client Sends HTTP Headers in one packet.
Client Sends HTTP Body in one packet.
Client Revieves ACK for first packet.
Client Revieves ACK for second packet.
Client Revieves ACK for second packet.
Javaクライアントのようにヘッダー/本文を並列に送信するようにC#Webサービスクライアントを構成する方法はありますか?
どんな助けやポインタも大歓迎です。