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++;
}
}
EDIT:これは私が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は、(1〜2)SOAPよりも優れていますが、ラージオブジェクト(大きな画像バイト配列を持つオブジェクト)にSOAPがはるかに高速です:小さなオブジェクトの
、例えば:私はさらにいくつかのテストをしました。
もう1つの奇妙なことは、私がRESTループのvar test = (Test)dcs.ReadObject(stream);
行をコメントアウトすると、実際にパフォーマンスが低下することです。
"C#"などをタイトルの末尾に追加しないでください。それがタグのためのものです。 –
私が知る限り、あなたは異なる 'WebRequests'を使うことができ、彼らは同じ接続を再利用しようとします。あなたは実際には起こらないと確信しています、そして、サーバは 'Keep-Alive'をサポートしていますか? – svick
'GetResponse'と' GetResponseStream'は 'IDisposable'を実装しているので' using(){...} 'ブロックに囲みます。 –