通过我的应用程序,我使用 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/