在处理流式传输的 MTOM 请求时, WCFhttp://tempuri/1/number
用于 Content-ID uri 引用。
有什么方法可以强制 WCF 为 xop:Include 使用不同的 Content-ID 引用?
问题背景:
我正在为支持 MTOM 的 jax ws java Web 服务构建一个 .NET 客户端,该服务处理流式大数据上传。我手工制作了服务和数据联系人(WSDL 生成的合同不正确并且不允许流式传输)。
问题是 Web 服务 (jax ws) 没有收到包含数据的请求正文。
它接收在标头中传输的数据。
我们已经为 ws 构建了一个 java 客户端——这个可以工作。
从 java 和 wcf 发出请求时,我已经捕获并比较了 HTTP 流量,唯一的区别是在发布多部分数据时如何生成 Content-ID 引用:
WCF 使用
http://tempuri/1/...
产生编码值的 Content-ID 引用,例如href="cid:http%3A%2F%2Ftempuri.org%2F1%2F634019957020047928"
Java 客户端使用“电子邮件风格”的 uri,例如
href="cid:3f3ec388-8cd9-47aa-a603-fb1bc17935b8@example.jaxws.sun.com"
这些在以下 xop-includes 中产生(数据是肥皂体中的唯一元素)(XOP 包括规范)
//WCF:
<Data>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:http%3A%2F%2Ftempuri.org%2F1%2F634019957020047928" />
</Data>
//JAVA:
<Data>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:3f3ec388-8cd9-47aa-a603-fb1bc17935b8@example.jaxws.sun.com"/>
</Data>
稍后,在多部分数据中,内容由未编码的 Content-ID 引用:
--uuid:7e166bb7-042f-4ba3-b6ef-98fbbc21244b+id=1
Content-ID: <http://tempuri.org/1/634019957020047928>
Content-Transfer-Encoding: binary
Content-Type: application/octet-stream
我想jax Web 服务框架中可能存在错误,它无法识别 WCF 生成的+urlencoded Content-ID uri 引用。
有什么方法可以强制 WCF 为 xop:Include 使用不同的 Content-ID 引用?
编辑:我找到了具有 GenerateUriForMimePart 方法的 XmlMtomWriter,它用于生成 Content-ID。
public static string GenerateUriForMimePart(int index)
{
return string.Format(CultureInfo.InvariantCulture,
"http://tempuri.org/{0}/{1}", new object[] { index, DateTime.Now.Ticks });
}
似乎 ID 生成以任何方式都不可覆盖。
这里描述了一个类似的问题,提供的答案没有帮助:http ://social.msdn.microsoft.com/Forums/en/wcf/thread/f90affbd-f431-4602-a81d-cc66c049e351