【问题标题】:WebClient.UploadFile() throws exception on some binary filesWebClient.UploadFile() 在一些二进制文件上抛出异常
【发布时间】:2010-11-27 10:50:41
【问题描述】:
我正在使用 WebClient.UploadFile() 方法将文件发布到服务进行处理。该文件包含一个 XML 文档,其中包含一个压缩的 b64 编码内容元素。对于部分文件(目前为1个),UploadFile抛出异常,表示底层连接已关闭。套接字级别的最里面的异常给出消息“现有连接被远程主机强制关闭”。
问题:
- 有人遇到过同样的问题吗?
- 为什么它会为某些文件而不是所有文件抛出异常?
- 我应该为包含二进制内容的文件设置一些额外的参数吗?
- 有解决方法吗?
此功能在 VPN 情况下运行良好,但显然我们希望在标准 Internet 情况下使用它。
谢谢,瑞恩
【问题讨论】:
标签:
c#
asp.net
web-services
upload
【解决方案1】:
听起来像是位于您和服务器之间的防火墙或其他安全软件可能会将请求视为潜在攻击而拒绝。我之前遇到过这种情况,防火墙拒绝包含特定文件扩展名的请求——即使该文件扩展名是在查询字符串参数中编码的!
如果我是你,我会取出有问题的文件并开始从其中修剪 XML。您可能能够找到触发问题的特定 XML 块。一旦你确定了罪魁祸首,你就可以弄清楚如何解决这个问题(例如,通过在发送文件之前使用它们的 Unicode 值而不是文本对这些字符进行编码)。但是,如果对文件的任何更改导致问题消失(它不是由特定的令人担忧的文本引起的),那么我很难过。
【解决方案2】:
有没有可能是大小问题,有问题的文件超过一定大小,所有工作文件都在它下面?服务器在达到最大接受请求大小时关闭连接符合您的症状。您提到它在 VPN 中工作,所以这无疑是一个延伸,但也许 VPN 案例是不同的服务器,配置不同(或者最大请求因其他原因而不同)。
是否有非 WebClient 方法可以将文件从同一台机器上传到同一服务,如果有,它们是否有效?