Mar*_*rek 10 wcf soap mtom jax-ws xop
http://tempuri/1/number处理流式MTOM请求时,WCF 用于Content-ID uri引用.
有没有办法如何强制WCF为xop使用不同的Content-ID引用:Include?
问题背景:
我正在为支持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客户端使用"电子邮件式"uris,就像 href="cid:3f3ec388-8cd9-47aa-a603-fb1bc17935b8@example.jaxws.sun.com"
以下xop-includes中的这些产量(数据是soap体中唯一的元素)(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>
Run Code Online (Sandbox Code Playgroud)
稍后,在多部分数据中,内容由未编码的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
Run Code Online (Sandbox Code Playgroud)
我想jax Web服务框架中可能存在一个错误,它无法识别WCF生成的+ urlencoded Content-ID uri引用.
有没有办法如何强制WCF为xop使用不同的Content-ID引用:Include?
编辑:我已发现其具有GenerateUriForMimePart方法XmlMtomWriter,这被用于生成内容的ID.
public static string GenerateUriForMimePart(int index)
{
return string.Format(CultureInfo.InvariantCulture,
"http://tempuri.org/{0}/{1}", new object[] { index, DateTime.Now.Ticks });
}
Run Code Online (Sandbox Code Playgroud)
似乎ID生成无论如何都是可以覆盖的.
这里描述了类似的问题,提供的答案没有帮助:http://social.msdn.microsoft.com/Forums/en/wcf/thread/f90affbd-f431-4602-a81d-cc66c049e351
经过长时间的调查后,我对自己说:如果不重新实现整个 XmlMtomWriter 以及 WCF 中的其他相关层和关注点,就不可能实现 - 几乎 mtom 实现中涉及的所有内容都是内部的。
| 归档时间: |
|
| 查看次数: |
2899 次 |
| 最近记录: |