【发布时间】:2012-07-01 09:39:44
【问题描述】:
首先,我的问题是基于我在网上找到的一些答案,我希望有人可以做出澄清的答案。
从我目前的发现中总结出来的问题非常简短: 使用CoreService,似乎WCF是默认上传大于16,384字节的文件的限制。我希望我只是忽略了一些非常基本的东西,这将允许我上传的不仅仅是空的 gif 文件,而无需更改服务器配置,因为我打算将此代码用于多个 SDL tridion 实例。
只是为了提供上下文和我的发现,你可能不需要阅读所有这些,但由于我花了很多时间寻找和尝试各种事情,我想我不妨把它写下来给下一个人遇到这个。
我正在上传一个文件,使用 CoreService Stream Upload,基于这个例子: How can I import external files into SDL Tridion 2011 using core service?
我不想复制所有这些代码,但我可以成功地将一个小的 (empty.gif) 上传到一个临时位置,以此为基础,然后我得到一个 Windows 临时文件路径。
String tempFileLocationOnServer = streamUploadPort.uploadBinaryByteArray(
fileName, data);
对于稍大的文件,80K 的 PDF,我得到一个例外:
反序列化操作“UploadBinaryByteArray”的请求消息正文时出错。读取 XML 数据时已超出最大数组长度配额 (16384)。可以通过更改创建 XML 阅读器时使用的 XmlDictionaryReaderQuotas 对象的 MaxArrayLength 属性来增加此配额。第 1 行,位置 2461。
我发现了这个WCF readerQuotas settings - drawbacks?,这似乎解释了它是 WCF 的一个问题,并且是为了防止 DDOS,并且可以调整这些值。
我认为 80K 字节并不多,我没有做任何我无法通过具有相同凭据的 Web 界面做的事情。
而且由于 CoreService 已经需要用户名/密码,我不明白为什么会出现 DDOS 问题,因为在有效负载之前,该请求应该在身份验证时被拒绝。
我知道诸如 webdav 或在 Tridion 实例上映射网络驱动器之类的替代方法,或者使用单独的网络服务器来转储文件,因此我可以在创建多媒体组件时将它们引用为“外部”,但我宁愿不必走那条路。
【问题讨论】: