WCF 新手,我正在尝试让 .NET 4.0 客户端使用托管在 JBOSS 中的 Web 服务。我相信 Web 服务的结果正在使用 x-fire 进行序列化。客户端使用 WCF 连接到服务。这在使用 Ntlm 对调用者进行身份验证的内部 Web 服务中。
我可以向我的客户端添加服务引用,并调用服务器上的一种方法。我已经确定请求正在发送,并且响应确实回来了。问题是响应不是传统的 SOAP 格式,我相信标准的 WCF 绑定无法解释这一点。以下是有关该应用程序的一些信息:
应用程序配置
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="myBinding" >
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://server/services/WS" binding="basicHttpBinding"
bindingConfiguration="myBinding" contract="myContract"
name="myEndpoint" />
</client>
</system.serviceModel>
请求正在发送到服务器...
POST http://server/services/WS HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Accept-Encoding: gzip, deflate,gzip, deflate,gzip, deflate
Authorization: NTLM
Host: server
Content-Length: 145
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><getAppInfo xmlns="http://ws.application.com"/></s:Body></s:Envelope>
从服务器返回的响应(从提琴手拉出)......
HTTP/1.1 200 OK
Connection: close
Date: Mon, 18 Jun 2012 19:48:04 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Set-Cookie: blah; Path=/
Content-Type: multipart/related; type="application/xop+xml"; start="<soap.xml@xfire.codehaus.org>"; start-info="text/xml"; boundary="----=_Part_14_20837339.1340048884628";charset=UTF-8
------=_Part_14_20837332219.1340048884628
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: 8bit
Content-ID: <soap.xml@xfire.codehaus.org>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><getAppInfoResponse xmlns="http://ws.app.com"><out><apiVersion xmlns="http://dto.ws.app.com">55</apiVersion><dbBuildNumber xmlns="http://dto.ws.app.com">12312</dbBuildNumber><appBuildNumber xmlns="http://dto.ws.app.com" xsi:nil="true" /></out></getAppInfoResponse></soap:Body></soap:Envelope>
------=_Part_14_20837332219.1340048884628--
来自.net客户端的错误消息如下......
The content type multipart/related; type="application/xop+xml"; start="<soap.xml@xfire.codehaus.org>"; start-info="text/xml"; boundary="----=_Part_14_20837332219.1340048884628";charset=UTF-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 738 bytes of the response were: '
其余的异常只是重复来自服务器的初始响应。
我的猜测是我需要进行自定义绑定,或者类似的东西。我环顾四周寻找如何做到这一点的好例子,但他们似乎都遗漏了一些东西,阻止我将所有东西连接在一起。如果我能让自定义绑定正常工作,我的猜测是解析响应,并将 ------ 行之间的所有内容传递给 WCF 反序列化器,因为这是实际的肥皂响应。
有没有人对如何做到这一点有任何想法,可以效仿的好例子,或者完全不同的方法?
顺便说一句,网络服务是一个黑盒子,那里不会发生任何编码更改。
谢谢。