2010-02-09 117 views
25

我正在嘗試創建第三方應該消費的服務。
使用者與SOAP 1.1兼容,這就是爲什麼我使用basicHttpBinding作爲服務器的原因。當發出實際的請求時,服務器預期的內容類型似乎出了問題。使用basicHttpBinding我不明白爲什麼服務器仍然期望'application/soap + xml',據我所知,這只是SOAP 1.2所必需的。

我已經使用wireshark來弄清楚這兩個人正在溝通什麼。請參閱下面的tcp流和設置。

任何幫助表示讚賞。

WCF和肥皂1.1

第三方應用程序請求

POST/HTTP/1.1

的SOAPAction: http://tempuri.org/ITestService/Hello

內容類型:文本/ XML;字符集= UTF-8

主機:shdesktop:8000

的Content-Length:297

期望值:100繼續

連接:關閉

WCF服務器響應

HTTP/1.1 415無法處理 消息,因爲內容類型 'text/xml; charset = utf-8'不是 預期的類型'application/soap + xml; charset = utf-8'。

的Content-Length:0

服務器:HTTPAPI/2.0

日期:星期二,2010 09 2 14時03分19秒GMT

連接:關閉

服務配置

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="behTestService" name="ConsoleApplication1.TestService"> 
     <endpoint address="" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <endpoint address="TestService" binding="basicHttpBinding" 
      contract="ConsoleApplication1.ITestService" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8000" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="behTestService"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

回答

19

basicHttpBinding的確使用SOAP 1.1--但在這種情況下,您將擁有內容類型application/soap+xml

由於您的客戶端發送的是text/xml - 他們希望有一個REST接口嗎?這將由WCF webHttpBinding處理。

MSDN WCF REST Developer Center上閱讀WCF中關於REST的更多信息,並查看Pluralsight screencast series on WCF REST - 強烈推薦!

+0

哦,SOAP 1.1會使用'application/soap + xml'?我明天會測試webHttpBinding,謝謝!我知道一個事實,即當我創建一個簡單的asmx服務時,它會起作用,如果它有所作爲。 – 2010-02-09 17:35:47

+2

@Silas:「老式」ASP.NET webservices(ASMX)**和** WCF basicHttpBinding使用SOAP 1.1 - 所以應該沒問題,真的。您需要檢查您的客戶端是向您發送SOAP請求,還是僅僅嘗試向您的URL發佈XML – 2010-02-09 19:46:37

+0

我打電話給http:// ,而不需要撥打http:// /TestService。我愚蠢的錯誤。感謝所有的幫助! – 2010-02-16 14:19:54

6

通常,當我們在網絡服務,其中包括文本得到一個消息/錯誤:

content type 'text/xml' 

這意味着Web服務器返回錯誤頁面,而不是預期的XML響應。

3

我有完全相同的問題 - 定義是說它是肥皂1.2,但期望1.1作爲內容類型是不同的。

我發現,如果我從調整好自己的服務器配置:

... 
<endpoint address="" .../> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8001/services/fooService" /> 
     </baseAddresses> 
    </host> 
... 

要:

... 
<endpoint address="fooService" .../> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8001/services" /> 
     </baseAddresses> 
    </host> 
... 

WSDL顯示它作爲這一次的SOAP 1.1。