簡體   English   中英

如何配置C#Web服務客戶端以並行發送HTTP請求標頭和正文?

[英]How do I configure a C# web service client to send HTTP request header and body in parallel?

我正在使用VS2008 .Net 3.5中生成的傳統C#Web服務客戶端,該客戶端繼承自SoapHttpClientProtocol。 這正在連接到用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時間的兩倍。 而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.

無論如何,有沒有配置C#Web服務客戶端以像Java客戶端那樣並行發送標頭/正文?

任何幫助或指針,不勝感激。

感謝Rob的答復,最終我選擇使用“添加服務參考” / WCF代理生成,默認情況下會這樣做。 可能是因為它在下面使用了更新的HTTP庫。

我確實遇到了一些WCF代理生成問題,這些問題與返回復雜對象的原始數組的SOAP方法(即:返回包含對象數組的對象工作正常)有關。 為了解決這個問題,您要么將數組包裝在對象中,要么將SOAP服務器配置從RPC切換到DOCUMENT(這就是我們所做的)。

我認為您可以使用繼承的EndGetRequestStream方法來破解SoapHttpClientProtocol。 將其保存到緩沖區,直到請求完成。 然后制作自己的視頻流,並立即將其全部推送出去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM