3

好的。通常我讨厌问问题,但我遇到的这个问题一直让我绞尽脑汁。

该公司正在开发与 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但不会直接影响。我不太擅长解释,所以你最好阅读官方文档。

4

2 回答 2

0

Web.config 文件中唯一的更新或更改点是更新服务引用时。
或者,如果您编写了代码来更新 Web.config 文件的内容。

于 2012-10-19T11:02:01.907 回答
0

首先,阅读 Jon Galloway 关于web.config 继承的文章。

其次,消息大小不仅仅取决于文件大小。数组中的二进制数据将采用 base64 编码(增加约 30% 的大小)。编码的选择也会影响消息的大小。UTF-16 将为每个字符发送 2 个字节,而 UTF-8 使用多字节模式。

于 2012-10-19T11:09:54.403 回答