Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF客户端如何使用多部分/相关的JavaWebService响应?_C#_Java_Wcf_Response_Content Type - Fatal编程技术网

C# WCF客户端如何使用多部分/相关的JavaWebService响应?

C# WCF客户端如何使用多部分/相关的JavaWebService响应?,c#,java,wcf,response,content-type,C#,Java,Wcf,Response,Content Type,我编写了一个使用Java Web服务的WCF C#客户端: var client = new abcClient("abc"); var response = client.AbcTransaction(msg); web.config中的WCF绑定信息是: <customBinding> <binding name="abcSOAP"> <textMessageEncoding messageVersion="Soap12" /> <htt

我编写了一个使用Java Web服务的WCF C#客户端:

var client = new abcClient("abc");
var response = client.AbcTransaction(msg);
web.config中的WCF绑定信息是:

<customBinding>
 <binding name="abcSOAP">
  <textMessageEncoding messageVersion="Soap12" />
  <httpsTransport requireClientCertificate="true" />
 </binding>
</customBinding>

看起来很直截了当,对吧。。。事实上,SoapFaults很容易使用:

HTTP/1.1 500 Internal Server Error
Content-Length: 783
Content-Type: application/soap+xml;charset=UTF-8
Server: Microsoft-IIS/8.0
Date: Mon, 18 Nov 2013 14:06:18 GMT

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body><soap:Fault>...
HTTP/1.1500内部服务器错误
内容长度:783
内容类型:应用程序/soap+xml;字符集=UTF-8
服务器:Microsoft IIS/8.0
日期:2013年11月18日星期一14:06:18 GMT
...
但是,Web服务以多部分/相关内容类型发送“常规”响应:

HTTP/1.1 200 OK
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:c79210c3-bbef-4aa3-82ae-6a20c7a96564"; start="<root.message@cxf.apache.org>"; start-info="application/soap+xml"
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
Date: Mon, 18 Nov 2013 14:11:25 GMT
Content-Length: 658

--uuid:c79210c3-bbef-4aa3-82ae-6a20c7a96564
Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml";
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">...
HTTP/1.1200正常
内容类型:多部分/相关;type=“应用程序/xop+xml”;边界=“uuid:c79210c3-bbef-4aa3-82ae-6a20c7a96564”;start=“”;start info=“应用程序/soap+xml”
内容编码:gzip
改变:接受编码
服务器:Microsoft IIS/8.0
日期:2013年11月18日星期一14:11:25 GMT
内容长度:658
--uuid:c79210c3-bbef-4aa3-82ae-6a20c7a96564
内容类型:应用程序/xop+xml;字符集=UTF-8;type=“应用程序/soap+xml”;
内容传输编码:二进制
内容ID:
...
这会导致WCF客户端出现ProtocolException,因为WCF客户端不希望得到多部分/相关的答案。ProtocolException消息是(德语):

Der Inhaltstyp“multipart/related;type=“application/xop+xml”; 边界=“uuid:ead716a3-4b8b-4207-ad66-b9f18ae368b2”; start=“”; start info=“application/soap+xml”der Antwortnachricht stimmt nicht mit-dem-Inhaltstyp-der-Bindung(应用程序/soap+xml;字符集=utf-8) 尤贝林。你是不是已经定义好编码器了 请注意,这是一种内容类型支持的方法 实施者。在蚂蚁草中插入1024个字节:

英文:

内容类型“multipart/related;type=“application/xop+xml”; 边界=“uuid:ead716a3-4b8b-4207-ad66-b9f18ae368b2”; start=“”; 响应消息的start info=“application/soap+xml” 与绑定的内容类型不匹配(应用程序/soap+xml;字符集=utf-8)。如果使用自定义编码器,请确保 IsContentTypeSupported方法已正确实现。前1024 响应的字节数为:


有人知道我如何使用WCF客户机(不使用HttpWebRequest类)使用此多部分/相关消息吗?这个szenario有任何可用的配置吗?

我认为将系统转换为MTOM可以解决这个问题。

Max'和Mehmet的提示显示了正确的方向,但我不得不做更多的更改。 由于我在中使用了元素,wcf配置忽略了messageEncoding=“Mtom”属性

与其使用属性,不如直接使用元素:

<binding name="energylinkSOAP">
    <mtomMessageEncoding messageVersion="Soap12" />
    <httpsTransport requireClientCertificate="true" />
</binding>


这样,您还可以定义更多配置,例如messageVersion。

您是否尝试从
文本
切换到
Mtom
来编码SOAP消息?配置:
/code:
binding.MessageEncoding=WSMessageEncoding.Mtom是的,它似乎没有改变任何东西。(我将把绑定信息添加到我的问题中)嗨,Mehmet,我也希望如此,但这并没有改变什么,如果我将messageEncoding=“Mtom”添加到Awesome,这正是我想要的。如果您试图使用Oracle ADF服务,并通过代理执行此操作,它们可能会成功,但.NET将抛出有关响应类型的异常。通过编程方式([binding].MessageEncoding=WSMessageEncoding.Mtom;)解决了我的问题。@Tor如何设置MessageEncoding?你还有密码吗?对于Mtom绑定,我只看到readerQuotas和writeEncoding。您使用的是customBinding还是wsHttpBinding?