Chr*_*Dog 29 .net iis-7 web-services large-file-upload
我有一个Web服务,它接受一个byte []并保存它.
这适用于"小"文件,但是一旦我达到一定的大小,Web服务就会失败并返回"请求失败,HTTP状态为404:未找到".
从我所看到的,这似乎是一个IIS设置,限制了可以发布的文件的大小(以防止拒绝服务攻击).我试图增加那个设置,但是我无法确定设置的位置和设置方式.我正在使用IIS7,而web服务是在.net(asmx)中完成的.
在Web服务的web.config中,我添加了以下内容(这似乎增加了可以接受的文件大小,但不是一直到这个设置大小)
<system.web>
<httpRuntime executionTimeout="999999" maxRequestLength="2097151" />
...
</system.web>
Run Code Online (Sandbox Code Playgroud)
有关增加Web服务的文件大小的位置(以及如何)的任何建议将非常感激.
Chr*_*Dog 31
除了问题中提到的httpRuntime/maxRequestLength之外,看起来还有一个附加项可以添加到Web服务的web.config文件中以允许大文件传输.
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2000000000" />
</requestFiltering>
</security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
这似乎可以通过Web服务上传更大的文件.
您应该记住,Web服务主要不是设计为文件传输机制.任何专门设计的文件传输协议都可能比Web服务做得更好.例如,此类协议更有可能处理错误恢复,部分上传等.
但是,如果您要在.NET中为此目的使用Web服务,则应尽可能使用WCF.除了其他好处之外,WCF处理流式传输,因此在内存使用方面会更高效.我担心如果你遵循上面的两个(准确的)建议,你的下一个结果将是"内存或资源不足"的异常,因为旧的ASMX技术试图一次将整个25MB文件加载到内存中.事实上,它可能同时在内存中有几个副本!
如果我不得不使用Web服务并且需要支持非常大的文件,我会考虑实现一个允许您分段上传文件的系统.
例如.
这将允许您对大型上传进行分块,而不是在内存中保留太多数据.缺点是您仍然使用相当低效的传输机制.
只是为google这个web.config的人添加信息:
C:\ Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI
<location path="Copy.asmx"> <!-- Name of you asmx -->
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600"/> <!-- 100 megs -->
</requestFiltering>
</security>
</system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)
这解决了我们在解决这个问题很长时间之后的问题.
| 归档时间: |
|
| 查看次数: |
51432 次 |
| 最近记录: |