2009-01-20 86 views
4

我目前正在研究一個需要使用Java web服務的項目。如果我使用舊的webservices(asmx)連接到服務,它可以正常工作。但是,如果我嘗試使用WCF客戶端執行同樣的操作,則會出現以下錯誤:消費Java服務時WCF客戶端錯誤

內容類型text/xml;響應消息的charset = utf-8與綁定的內容類型(application/soap + xml; charset = utf-8)不匹配。如果使用自定義編碼器,請確保IsContentTypeSupported方法正確實施。

我是非常簡單的,它看起來像下面這樣:

//classic web service 
OldSkoolService.HelloService serviceCall = new esb_wsdlsample.OldSkoolService.HelloService(); 
Console.WriteLine(serviceCall.SoapVersion); 
Console.WriteLine(serviceCall.sayHello("something")); 

HelloServiceClient prototypeClient = new HelloServiceClient(); 
var serviceChannel = prototypeClient.ChannelFactory; 

Console.WriteLine(serviceChannel.Endpoint.Binding.MessageVersion); 
Console.WriteLine(prototypeClient.sayHello("somethinge")); //<-- Error occurs here  

的綁定/端點配置文件是相當簡單的,以及:

<bindings> 
    <customBinding> 
    <binding name="Soap12Binding"> 
     <textMessageEncoding messageVersion="Soap12"/> 
     <httpTransport />    
    </binding> 
    </customBinding>   
</bindings> 
<client> 
    <endpoint address="http://10.10.6.51:7001/esb/HelloService" behaviorConfiguration="" 
     binding="customBinding" bindingConfiguration="Soap12Binding" contract="Prototype.ESB.HelloService" 
     name="HelloServicePort" />   
</client> 

作爲一個方面說明我正在努力使用soap 1.2,因爲我需要能夠從服務中捕獲異常。

回答

1

雖然它不是由SOAP 1.2規範需要,建議(即SHOULD),該SOAP消息使用的內容類型的應用程序/肥皂+ XML的。

你應該在服務器端改變它。如果沒有,那麼我認爲你將不得不擺弄配置文件中的textMessageEncoding綁定元素,以使其接受text/xml內容類型。

2

根據您的錯誤消息,它只是意味着您的服務器響應消息是SOAP 1.1,而您期望SOAP 1.2。

您必須在客戶端上更改爲SOAP 1.1(使用BasicHttpBinding,至少可以測試它,看看它是否以這種方式工作)。