如何在WCF中解码多部分/相关响应?

时间:2012-10-09 17:31:10

标签: c# .net wcf web-services soap

我有一个web服务,将结果返回为multipart/related

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: multipart/related; boundary=MIMEBoundaryurn_uuid_FCAC227A0F1D534C2D1349803588825;
type="application/soap+xml"; start="<0.urn:uuid:FCAC227A0F1D534C2D1349803588826@apache.org>"; action="urn:MyServiceAction"
Date: Tue, 09 Oct 2012 17:26:28 GMT
Content-Length: 2961

--MIMEBoundaryurn_uuid_FCAC227A0F1D534C2D1349803588825
Content-Type: application/soap+xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID: <0.urn:uuid:FCAC227A0F1D534C2D1349803588826@apache.org>

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
[... snipped ...]
</soapenv:Envelope>
--MIMEBoundaryurn_uuid_FCAC227A0F1D534C2D1349803588825--

WCF似乎不支持这一点。我正在使用自定义绑定,而TextMessageEncodingBindingElement会显示一条消息,告诉我内容类型不受支持。 MtomMessageEncodingBindingElement也抱怨,因为它不期望application/soap+xml而是application/xop+xml

是否有MessageEncoder可以正确处理multipart/related的{​​{1}}?或者有一种简单的方法让我在发送到application/soap+xml之前挂钩管道并提取有效负载?

1 个答案:

答案 0 :(得分:3)

将SOAP与MIME结合起来的标准叫做SOAP With Attachments(SwA,http://en.wikipedia.org/wiki/SOAP_with_Attachments)。如果这是你正在使用的,那么这里有一个自定义编码器:http://wcfswaencoder.codeplex.com/ 即使它不是SwA,自定义编码器代码也可能是一个很好的起点。