HttpWebRequest到c#中的web服务; 如何从响应流中获取数据?

我正在使用POST调用Web服务并接收2MB xml。 问题是我需要花费很多时间才能使用Stream中的数据。 响应似乎是在7秒之后,但是从响应流中读取内容(它是一个字符串)还需要10秒。

Stopwatch s = new Stopwatch(); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(MyUri); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = Poststring.Length; s.Start(); StreamWriter swriter = new StreamWriter(req.GetRequestStream()); swriter.Write(Poststring); swriter.Close(); // Get the response. 7 sec HttpWebResponse response = (HttpWebResponse)req.GetResponse(); s.Stop(); Debug.WriteLine("Talking to Web-Service: "+s.ElapsedMilliseconds); s.Reset(); // Get the stream containing content returned by the server. Stream dataStream = response.GetResponseStream(); // Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader(dataStream); // Read the content. 10 sec XmlReader xmlReader = XmlReader.Create(dataStream); s.Start(); XDocument xdoc = XDocument.Load(xmlReader); s.Stop(); Debug.WriteLine("Convert stream to some useful data: "+s.ElapsedMilliseconds); 

输出以毫秒为单位

 Talking to Web-Service: 6595 "Convert" stream to some useful data: 10772 

为什么读取内容需要10秒? 在阅读内容时,是否与网络服务进行了一些通信或等待数据? 它只是一个简单的文本文件(xml),大约2MB。 我认为那些2 MB在6596毫秒内被转移。 因为当我使用浏览器调用该服务时,xml内容将在6-7秒内显示。

与Web服务交谈的时间还可以,但那些10772毫秒内发生了什么?

编辑:问题是在那里。 我得到不同的答案,他们互相矛盾

添加以下内容

 httpWebRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate"); httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

导致:

 Talking to Web-Service: 6595 "Convert" stream to some useful data: 256 

现在我有像浏览器一样的性能!

 XDocument xdoc = XDocument.Load(response.GetResponseStream(), LoadOptions.None); 

避免使用XmlReader.Create并使用XDocument.Load(Stream,LoadOptions)重载。 http://msdn.microsoft.com/en-us/library/cc838321.aspx

GetResponse不会返回完整的响应流。 GetResponse将发送您的请求并根据响应中的标头信息返回HttpWebResponse对象。 HttpWebResponse还有一个关联的流,您可以从中读取完整的响应主体。 这正是你在做的事情。

我怀疑你在调用GetResponse时看到的7秒延迟是服务器在生成XML文档和发送响应时的延迟。 XmlReader.Create的另外10秒延迟来自读取响应流(即,下载文件)。

XML是动态生成的吗? 7秒对于HTTP响应来说并不是非常长的时间,当然取决于您的服务器位置,质量等。