HttpWebRequest.GetResponse: "底层连接已关闭:接收时发生意外错误。"

3

我已经编写了一个C#的Windows服务(.NET Framework 3.5,C# 3.0),可以将文件和HTML表单信息发布到远程服务器,并将XML服务器响应存储在数据库中。下面是相关代码的主要部分:

    HttpWebRequest request = WebRequest.Create(postUrl) as HttpWebRequest;

    request.ProtocolVersion = HttpVersion.Version10;
    request.KeepAlive = false;
    request.Timeout = 600000;
    request.ReadWriteTimeout = 600000;
    request.Method = "POST";
    request.ContentType = contentType;
    request.UserAgent = userAgent;
    request.CookieContainer = new CookieContainer();
    request.ContentLength = formData.Length;

    using (Stream requestStream = request.GetRequestStream())
    {
        // Push it out there
        requestStream.Write(formData, 0, formData.Length);
        requestStream.Close();
    }

    return request.GetResponse() as HttpWebResponse;

我的服务可以正常处理所有小文件,但是当我尝试发送较大的文件(8-9 MB)时,会出现以下错误。

    The underlying connection was closed: An unexpected error occurred on a receive.

我使用 Fiddler 查看了出站请求,并能够获取以下信息:

    HTTP/1.1 504 Fiddler - Receive Failure
    Content-Type: text/html
    Connection: close
    Timestamp: 12:25:04.067

    ReadResponse() failed: The server did not return a response for this request.

在调用request.GetResponse()后约7分钟后发生故障。有没有办法确定是谁关闭了连接?此外,我应该尝试什么来解决这个问题?提前感谢!

1个回答

2

因此,第二个链接是更新的。这适用于接收上传的服务器。那是你控制的服务器吗? - Rebecca Chernoff
问题听起来不像是出在你这边。我猜也许可以测试一下4mb是否是限制?接收服务器甚至是IIS吗?你有接收方联系人的联系方式吗? - Rebecca Chernoff
@feroze:我想我已经有了所需的证据。这是故障发生的实际点,根据跟踪日志文件:System.Net.Sockets 错误:0:[3336] Socket#45523402::Receive 中的异常 - 远程主机强制关闭了一个现有的连接。 - Mass Dot Net
顺便说一句,我最终在让它正常工作之前将来自上述链接的代码添加到了machine.config中。 - Mass Dot Net
我认为我们知道服务器会过早关闭连接,但问题是为什么?因此,如果您将整个日志发布到pastebin.com(如果有任何个人身份信息,请删除,例如用户名/密码),我们可以查看一下。 - feroze
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接