c# - IIS 中的 "An existing connection was forcibly closed by the remote host"错误,但不是 VS 开发服务器

标签 c# asp.net iis iis-7

通过我的应用程序,我使用 WebClient 在线访问文件并处理它们。这是一个这样的例子:

using (var webClient = new WebClient())
{
    webClient.Credentials = new NetworkCredential(userName, password, domain);
    var bytes = webClient.DownloadData(urlToWorkbook);
    Stream stream = new MemoryStream(bytes);
    var workbook = new Workbook(stream);
    stream.Close();
    stream.Dispose();
    return workbook;
}

当我开发应用程序并通过 Visual Studio 的调试器进行测试时,一切正常。现在我已经部署了应用程序并且它正在通过 IIS 运行,我在 webClient.DownloadData() 调用中收到以下错误:

System.Net.WebException:WebClient 请求期间发生异常。 System.IO.IOException:无法从传输连接读取数据:现有连接被远程主机强行关闭。 ---> System.Net.Sockets.SocketException: 远程主机在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) 强行关闭了现有连接

编辑:另一件奇怪的事情是,当我将此代码放在我的 Controller 的索引操作(这是一个 MVC)应用程序上时,它会成功执行 DownloadData() 调用。只有当调用嵌入到我的应用程序中(需要它的地方)时,它才会失败。

我将我的网站本地发布到我机器的 IIS 上,但我遇到了同样的异常。我觉得我已经尝试了一百万个代码解决方案。这似乎是 VS 的 Web 服务器和 IIS 之间的区别。知道我可以在 IIS 中做什么吗?

最佳答案

事实证明,这与文件流打开时间过长有关。我的应用程序从 Sharepoint 存储中检索文件并循环遍历它们,将文件下载到字节数组中。它似乎不喜欢通过 IIS 时的处理方式,因此我进行了一些重构,以尽可能短的时间保持流打开。似乎现在可以工作了。

关于c# - IIS 中的 "An existing connection was forcibly closed by the remote host"错误,但不是 VS 开发服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559349/

相关文章:

iis - Web.config 大小限制错误

c# - c# 定时器自然是多线程的吗?

c# - double 型属性(类)和 double 型字段(SQL 查询)中 float 表示的差异

c# - 如何从 C# 代码或在运行 IIS 的服务器上使用 Powershell 生成 IIS7 CSR(用于 SSL)

c# - 哪些特性使类成为线程安全的?

javascript - 如何使用 javascript 更改基于另一个下拉列表的下拉列表值?

c# - HTML Agility Pack - 在特定节点之后选择节点

asp.net - 服务器端 json 的自动完成问题

c# - IIS 中的 RSA 容器返回 "Object already exists"

iis - 使IIS7.5网站成为一个应用程序