【发布时间】:2011-08-09 17:13:46
【问题描述】:
我正在尝试创建一个 HttpWebRequest 以通过 POST 将数据发送到一个 REST Web 服务,然后在处理后使用一个额外的 HttpWebRequest 来下载响应。
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 设置为 get 并且没有设置内容长度或方法
-
您的代码中没有一个错误吗?您正在设置 ContentLength=FileStream.Length,但仅上传 FileStream.Length-1 个字节。
-
抱歉,这只是我在尝试简化我在此处发布的代码时的一个错误。
标签: c# wcf rest httpwebrequest httpwebresponse