c# - 将 >48k 发送到 WCF 数据服务 (OData) 413 错误

标签 c# iis odata wcf-data-services

我遇到了一个问题,我的场景要求我将可能很大的文件发送到 WCF 数据服务。默认情况下,IIS 的 HTTP 请求似乎有 48k 的限制,但可以通过配置将其更改为更大的值。然而,这是一项防止 DoS 攻击的安全功能。此外,我无法控制部署到的 IIS 服务器,即使安装过程可能能够为此设置初始值。

发送的数据已经压缩并且通常低于 48k,因此可能有点极端情况,但如果用户无法上传他们的数据,他们可能会失去很多工作。

我考虑过以 block 的形式发送数据,但后来我失去了这个功能:

context.SaveChanges(SaveChangesOptions.ReplaceOnUpdate | SaveChangesOptions.Batch)

有什么选择吗? WCF 数据服务不适合这个,还有什么,传统的 web 服务?以上仍然可以使用替代代码但相同的技术来实现吗?我不得不通过服务发送数据。

最佳答案

通过选择使用 WCF 数据服务的 Web.Config 配置 IIS 7,我找到了问题的解决方案。我用了webHttpBinding

<system.serviceModel>
    <bindings>
        <webHttpBinding>
            <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
       </webHttpBinding>
     </bindings>
.....

maxReceivedMessageSize以字节表示,默认值为 64KB,以限制拒绝服务攻击的风险 - 将此设置为合理的值。

关于c# - 将 >48k 发送到 WCF 数据服务 (OData) 413 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19160227/

相关文章:

c# - JSON如何在反序列化过程中忽略丢失的对象

C# Selenium Webdriver 在 iframe 中查找元素

php - 有没有 MySQLOData 的文档?

odata - xsodata:转换器[索引]不是函数

c# - SQLite 错误 : Cannot delete WhereListIterator`1: it has no PK

c# - 用于二进制消息序列化/反序列化的结构

iis - TomCat 中的应用程序池?

iis - 使用 TCPChannel 通过 SSL 进行 .NET 远程处理

ssl - 在 IIS 中重写 URL 后找不到此页面

.net - OData 和 Entity Framework 向所有查询添加额外的 where 子句