我正在嘗試向REST Web服務發出多個相同的請求。我遇到的問題是,對於每個請求,似乎都會打開一個新套接字,這使得操作更慢(〜x10)太多。 (與使用SOAP代理通道的相同操作相比)。多個相同的Web請求
我已經查看了HttpWebRequest.KeepAlive,但我無法多次調用同一個Web請求上的GetResponse()。
下面這段代碼是什麼,我需要的想法,是的,我知道這將無法工作,因爲的原因,我在上面提到:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(serviceUri);
req.KeepAlive = true;
var dcs = new DataContractSerializer(typeof(Test));
while (enabled)
{
var stream = req.GetResponse().GetResponseStream();
if (stream != null)
{
var test = (Test)dcs.ReadObject(stream);
counter++;
}
}
編輯:這是我使用的SOAP循環測試:
private void SoapLoop()
{
IService1 proxy =
ChannelFactory<IService1>.CreateChannel(
tcpBinding, endpointAddress);
while (enabled)
{
var test = proxy.GetRead(new GetReadRequest());
counter++;
}
}
我轉移的對象在SOAP和REST中都是一樣的,大約是300KB。
EDIT2:我做了一些進一步的測試:
上的小物件,例如:100個字節REST優於SOAP(〜2:1),但在大的對象(具有大的圖像字節數組對象)SOAP快得多。
另一個奇怪的是,當我在REST循環中註釋掉行var test = (Test)dcs.ReadObject(stream);
時,性能實際上下降了:S。
請不要將「C#」等添加到標題的末尾。這就是標籤的用途。 – 2012-03-16 16:34:21
據我所知,你可以使用不同的'WebRequests',他們會嘗試重用相同的連接。你確定實際上並沒有發生,並且服務器確實支持'Keep-Alive'嗎? – svick 2012-03-16 16:36:48
將你的'GetResponse'和'GetResponseStream'包裝成'using(){...}'塊,因爲它們實現了'IDisposable'。 – 2012-03-16 16:40:54