我正在做一个HTTP,并在响应中获得一个庞大的XML。我看到xml在第182956位图上被截断,因此我无法对响应进行反序列化。有什么方法可以让我阅读全部内容吗?提前谢谢你的帮助。
string myresponse = string.Empty();
HttpWebResponse httpmyResponse = (HttpWebResponse)myrequest.GetResponse();
response = new StreamReader(httpmyResponse.GetResponseStream()).ReadToEnd();内容长度: 444313
内容-类型: application/xml
发布于 2014-09-16 23:20:23
我提到的所以贴 在评论中可能实际上解决了您的问题。特别是,如果将DefaultMaximumErrorResponseLength设置为更大的值,可能会有所帮助。在内部,这里是如何创建ResponseStream的
private Stream MakeMemoryStream(Stream stream) {
// some code emitted here
SyncMemoryStream memoryStream = new SyncMemoryStream(0); // buffered Stream to save off data
try {
//
// Now drain the Stream
//
if (stream.CanRead) {
byte [] buffer = new byte[1024];
int bytesTransferred = 0;
int maxBytesToBuffer = (HttpWebRequest.DefaultMaximumErrorResponseLength == -1)?buffer.Length:HttpWebRequest.DefaultMaximumErrorResponseLength*1024;
while ((bytesTransferred = stream.Read(buffer, 0, Math.Min(buffer.Length, maxBytesToBuffer))) > 0)
{
memoryStream.Write(buffer, 0, bytesTransferred);
if(HttpWebRequest.DefaultMaximumErrorResponseLength != -1)
maxBytesToBuffer -= bytesTransferred;
}
}
memoryStream.Position = 0;
}
catch {
}
// some other code
return memoryStream;
}这里的重要成员是响应流( stream )和响应流( memoryStream )--即响应流,您将因此返回到方法调用GetResposneStream()的响应流。如您所见,在读取流之前,方法将maxBytesToBuffer设置为DefaultMaximumErrorResponseLength*1024,如果DefaultMaximumErrorResponseLength不等于-1,则设置为buffer的长度,即1024。然后,在while循环中,它读取流,并在每次迭代中减少maxBytesToBuffer读取的字节数(maxBytesToBuffer -= bytesTransferred)。现在让我们考虑这两种情况。
DefaultMaximumErrorResponseLength为-1,stream为444313。在本例中,maxBytesToBuffer将等于buffer.Length,即1024。因此它将读取1024字节,因此bytesTransferred将是1024,在第一次迭代之后,maxBytesToBuffer将变为0(因为maxBytesToBuffer -= bytesTransferred),所以下次它将读取0字节,并退出while循环,因此您将只从整个流中读取1024字节。DefaultMaximumErrorResponseLength为1024,stream为444313。在这种情况下,maxBytesToBuffer将等于DefaultMaximumErrorResponseLength*1024 = 1048576。再次进入while循环,它将读取1024 (因为Math.Min(buffer.Length, maxBytesToBuffer))。在每次迭代时,它都会通过maxBytesToBuffer减少1024,所以虽然循环可以迭代至少1024次,每次读取1024字节。经过粗略的433迭代(即内容长度444313/1024 = 433.8),它应该读取流中的所有内容。说了这些之后,我首先检查DefaultMaximumErrorResponseLength的值,然后做数学计算(就像我以前做的那样),看看这是否是问题的根本原因。
代码取自参考资料来源网站
https://stackoverflow.com/questions/25856853
复制相似问题