在WCF服务中覆盖的配置文件

时间:2012-10-19 08:58:35

标签: wcf wcf-binding

好的。通常我讨厌提问,但这个问题我一直在抓我的脑袋。

该公司正在开发与sharepoint通信的wcf服务。我们设法让它工作,它从sharepoint接收调用和文件,但它只适用于小文件。 sharepoint中的设置设置为接受最大250 MB的文件。在我们的web.config文件中,与邮件大小相关的每个设置都设置为最大值(int32)。当我们运行服务时,它不会接受大于22 KB的文件。

我们做了一些跟踪,得到1个警告和1个错误。首先我们得到一个警告说明:

  

描述配置系统检测到a中的重复键   不同的配置范围,并与最近的更新   值。

错误表明最大邮件大小超出了[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会影响最大尺寸,但不会影响直接意义。我不太擅长解释,所以你最好还是阅读官方文档。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

首先,阅读Jon Galloway关于web.config inheritance的帖子。

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