WebRequest GetResponse 无响应,操作超时

发布于 2024-11-28 11:15:52 字数 1623 浏览 2 评论 0原文

我正在尝试创建一个 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();

I am trying to make an HttpWebRequest to send data via POST to a REST web service, and then follow-up with an additional HttpWebRequest to download a response after processing.

The POST is sending binary data up to the web service, as follows:

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();
}

Then the next request is made to tell the web service to process data on the server and return the status response.

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...

}

When I change content-type, it works for XML data. However, when I keep it as shown above with binary data, the operation always times out...even if I increase the timeout to longer than 10 seconds. The processing that it is doing should not take this long to return.

When I debug, it always hangs on the line with GetResponse:

HttpWebResponse processRequestResponse = (HttpWebResponse)processRequest.GetResponse();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偏爱你一生 2024-12-05 11:15:52

添加解决了这个问题。

HttpWebResponse uploadRequestResponse = (HttpWebResponse)uploadRequest.GetResponse();

写入流后

Adding

HttpWebResponse uploadRequestResponse = (HttpWebResponse)uploadRequest.GetResponse();

after writing to the stream resolved this issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文