1
我试图让一个HttpWebRequest通过POST发送数据到一个REST Web服务,然后跟进一个额外的HttpWebRequest来处理后下载响应。WebRequest GetResponse没有响应,操作超时
的POST正在发送二进制数据到Web服务,如下所示:
HttpWebRequest uploadRequest = (HttpWebRequest)WebRequest.Create(baseAddress + uploadURIRequest);
uploadRequest.Timeout = Timeout.Infinite;
uploadRequest.ReadWriteTimeout = Timeout.Infinite;
uploadRequest.Method = "POST";
uploadRequest.ContentLength = fileInfo.Length;
uploadRequest.ContentType = "application/octet-stream";
using (Stream writeStream = uploadRequest.GetRequestStream())
{
using (FileStream readStream = new FileStream(fileStreamFileName, FileMode.Open, FileAccess.Read))
{
byte[] data= new byte[readStream.Length];
int bytesRead = readStream.Read(data, 0, (int)readStream.Length);
writeStream.Write(data, 0, bytesRead);
readStream.Close();
}
writeStream.Close();
}
那么接下来的请求时告诉Web服务来处理服务器上的数据并返回状态响应。
HttpWebRequest processRequest = (HttpWebRequest)WebRequest.Create(baseAddress + processURIRequest);
processRequest.Timeout = 10000;
processRequest.ReadWriteTimeout = 10000;
processRequest.ContentType = "GET";
HttpWebResponse processRequestResponse = (HttpWebResponse)processRequest.GetResponse();
using (Stream processRequestResponseStream = processRequestResponse.GetResponseStream())
{
//Do stuff...
}
当我更改内容类型时,它适用于XML数据。但是,当我如上所示使用二进制数据保存它时,即使将超时时间增加到超过10秒,操作总是会超时。它正在做的处理不应该花这么长时间才能返回。
当我调试,它总是挂在符合的GetResponse:
HttpWebResponse processRequestResponse = (HttpWebResponse)processRequest.GetResponse();
您的进程请求看起来没有正确设置。您将ContentType设置为获取并且没有内容长度或方法的设置 – dbugger
您的代码中是否存在Off-by-one错误?您正在设置ContentLength = FileStream.Length,但只能上传FileStream.Length-1个字节。 – feroze
对不起,这只是一个错误,试图简化我在这里发布的代码。 – jkh