好的。通常我讨厌问问题,但我遇到的这个问题一直让我绞尽脑汁。
该公司正在开发与 sharepoint 通信的 wcf 服务。我们设法让它工作,它从共享点接收呼叫和文件,但它只适用于小文件。sharepoint 中的设置设置为接受最大 250 MB 的文件。在我们的 web.config 文件中,与消息大小相关的每个设置都设置为最大值 ( int32
)。当我们运行该服务时,它不会接受大于 22 KB 的文件。
我们进行了一些跟踪,得到 1 个警告和 1 个错误。首先,我们收到一条警告:
描述 配置系统在不同的配置范围内检测到重复键,并用更新的值覆盖。
并出现一个错误,指出已超出最大邮件大小 [64 KB]。
问题是我们在 23 KB 及以上的文件上收到此错误,尽管我们确实在 web.config 中放置了绝对最大大小。警告说配置文件被覆盖但是被什么覆盖?在过去的 3 天里,我到处寻找解决方案,但没有找到任何解决方案。
有人知道可能出了什么问题吗?什么可能会覆盖web.config
文件?如果由于某种原因它被默认值覆盖,为什么它甚至不接受大于 22 KB 的消息。
任何帮助将不胜感激。
编辑:发现问题
好的,对于那些仍然有类似问题的人,我将把我发现为我们解决的问题放在这里。
当然通常的消息大小配置
<binding maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
以及我在修复问题的示例代码中偶然发现的另一个设置(对最大 64MB 的文件进行测试,没有任何进一步的问题)
<system.webServer>
<serverRuntime uploadReadAheadSize="2147483647" />
<modules runAllManagedModulesForAllRequests="true"/>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
</system.webServer>
显然requestLimits maxAllowedContentLength
,默认情况下它的设置非常低,并且它覆盖了所有其他设置,大概是因为它是一个安全设置。
可以影响最大尺寸,serverRuntime uploadReadAheadSize
但不会直接影响。我不太擅长解释,所以你最好阅读官方文档。