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