好的。通常我讨厌提问,但这个问题我一直在抓我的脑袋。
该公司正在开发与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
会影响最大尺寸,但不会影响直接意义。我不太擅长解释,所以你最好还是阅读官方文档。
答案 0 :(得分:0)
Web.config文件中唯一的更新或更改点是更新服务引用。
要么
如果您已编写代码来更新Web.config文件内容。
答案 1 :(得分:0)
首先,阅读Jon Galloway关于web.config inheritance的帖子。
其次,邮件大小取决于文件大小。数组中的二进制数据将采用base64编码(大小增加约30%)。编码的选择也会影响邮件大小。 UTF-16将为每个字符发送2个字节,而UTF-8使用多字节模式。