2013-03-21 90 views
34

我在嘗試向WCFTestClient添加WCF服務時遇到了錯誤。我在網上瀏覽了一些解決方案,但是我無法完成它的工作。內容類型application/soap + xml; charset = utf-8不被服務支持

有人可以幫我解決這些問題嗎? 我也提供我的配置文件服務:

Content Type application/soap+xml; charset=utf-8 was not supported by service The client and service bindings may be mismatched. The remote server returned an error: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8

代碼:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <!-- When deploying the service library project, the content of the config file 
    must be added to the host's app.config file. System.Configuration does not 
    support config files for libraries. --> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="basicHttp" allowCookies="true" 
       maxReceivedMessageSize="20000000" 
       maxBufferSize="20000000" 
       maxBufferPoolSize="20000000"> 
      <readerQuotas maxDepth="32" 
       maxArrayLength="200000000" 
       maxStringContentLength="200000000"/> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <services> 
    <service name="WCFTradeLibrary.TradeService"> 
     <endpoint address="" binding="basicHttpBinding" 
      bindingConfiguration="basicHttp" 
      contract="WCFTradeLibrary.ITradeService">   
     </endpoint> 
    </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint 
      above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faul`enter code here`ts for 
      debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception info`enter code here`rmation --> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

</configuration> 
+0

可能的重複:http://stackoverflow.com/questions/8087515/wcf-service-using-basichttpbinding-is-still-sending-content-type-text-xml?rq=1 – 2013-07-01 10:01:07

+0

這是一個老問題,但它顯示爲Google的第一個答案。我只想指出,錯誤信息可能會引起誤解。根本的錯誤可能是完全無關的......這發生在我身上。 – sean717 2016-02-03 20:46:01

+0

當我向類中添加構造函數時,出現此錯誤。 – MC9000 2016-05-16 02:52:30

回答

3

我有同樣的問題,得到了它的「綁定」德通過這樣的服務行爲,服務工作:

出了名的行爲

<serviceBehaviors> 
     <behavior name="YourBehaviourNameHere"> 

並作出參考, NCE對自己的行爲在服務

<services> 
    <service name="WCFTradeLibrary.TradeService" behaviorConfiguration="YourBehaviourNameHere"> 

整個事情是:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <!-- When deploying the service library project, the content of the config file must be added to the host's 
    app.config file. System.Configuration does not support config files for libraries. --> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="basicHttp" allowCookies="true" 
       maxReceivedMessageSize="20000000" 
       maxBufferSize="20000000" 
       maxBufferPoolSize="20000000"> 
      <readerQuotas maxDepth="32" 
       maxArrayLength="200000000" 
       maxStringContentLength="200000000"/> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <services> 
    <service name="WCFTradeLibrary.TradeService" behaviourConfiguration="YourBehaviourNameHere"> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttp" contract="WCFTradeLibrary.ITradeService">   
     </endpoint> 
    </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="YourBehaviourNameHere"> 
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faul`enter code here`ts for debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception info`enter code here`rmation --> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

</configuration> 
+0

啓用includeExceptionDetailsInFaults確實幫助了我。 – 2014-02-11 22:01:12

0

在我來說,同樣的錯誤被遺漏在返回的數據類型

[DataContract] 
... 
[DataMember] 

屬性造成的。

檢查並嘗試添加,看看是否有幫助。

-3

檢查確定到web.config在綁定區段

9

在這裏,客戶端配置文件是解決這個問題對我來說是web.config中的例子。在< 綁定名稱=「TransportSecurity」注意messageEncoding =「TEXT」 textEncoding =「UTF-8」>

3

在我的案例中的類沒有默認的構造函數之一 - 無類默認構造函數不能被序列化。

+1

我很驚訝地發現這正是我遇到的問題。謝謝。我可以用更好,更具解釋性的錯誤信息來完成! – arame3333 2016-10-20 13:10:19

+1

我需要將這個刺青紋身放在手臂上作爲紀念風格的提醒。我比我想承認的更頻繁地遇到這個問題。 – user942620 2016-12-15 16:51:55

1

WCF客戶端嘗試發送使用MTOM extension (MIME type application/soap+xml用於傳送SOAP XML in MTOM)它的消息,可能會出現這種錯誤,但服務僅僅是能夠理解正常的SOAP消息(它不包含MIME部分,僅文本/ xml類型在HTTP請求)。

確保您生成的客戶端代碼是正確的WSDL

爲了使用MTOM在服務器端,更改您的配置文件中添加messageEncoding屬性:

<binding name="basicHttp" allowCookies="true" 
      maxReceivedMessageSize="20000000" 
      maxBufferSize="20000000" 
      maxBufferPoolSize="20000000" 
      messageEncoding="Mtom" > 
11

我碰到的命名問題。服務名稱必須完全是您的實施名稱。如果不匹配,則默認使用basicHttpBinding,導致text/xml內容類型。

你的課的名字是在兩個地方 - SVC標記和CS文件。

檢查端點合同 - 也是您的界面的確切名稱,僅此而已。我已經添加了不能在那裏的程序集名稱。

<service name="MyNamespace.MyService"> 
    <endpoint address="" binding="wsHttpBinding" contract="MyNamespace.IMyService" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
+2

值得一提的是,案件也很重要。 「Namespace.Service」與「NAMEspace.Service」不同。 – 2015-10-02 09:54:30

+1

這個答案導致我自己的問題。在refatoring期間,我的服務namepsace改變。如上所述,它導致從wsHttpBinding切換到basicHttpBinding,並導致錯誤。偉大的工作Jan. – Jeff 2016-10-11 19:14:38

+0

@Jeff - 我的人生2小時不見了。你的評論救了我。我的服務名稱和合同在停放該項目之前都進行了重構,並且已被破壞。 – 2018-03-09 20:59:02

1

我的情況有不同的解決方案。 客戶端正在使用basichttpsbinding [1]並且該服務正在使用wshttpbinding。

我通過更改服務器綁定到basichttpsbinding來解決問題。 此外,我不得不通過向目標框架設置爲4.5:

<system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 

[1]交際是通過https。

-1

我遇到了同樣的錯誤信息。我設法修復它:

在我的情況下,錯誤是我錯過了我的返回類的父類中的[datacontract]和[datamember]屬性。錯誤消息是誤導性的。

[OperationContract] 
List<MyClass> GetData(); 

[DataContract] 
public class MyClass : MyParentClass 
{  
    [DataMember] 
    public string SomeString { get; set; }  
} 

// Missing DataContract 
public class MyParentClass 
{ 
    // Missing DataMember 
    public int SomeNumber { get; set; } 

} 
+1

這是另一個問題,還是你建議作者可能面臨類似的問題?如果是後者,請編輯您的答案以使其更清晰。如果您發佈的是其他問題,請將其作爲單獨問題發佈。 – 2015-06-01 22:02:52

+0

注意謝謝。我希望我的編輯更清楚。這可能是問題的解決方案。 – 2015-06-02 13:03:50

0

對我來說,由於涉及到大量的方法和類,所以很難確定問題。

我所做的就是從WebService接口中評論(刪除)一些方法並嘗試,然後評論另一堆方法並嘗試,直到找到導致問題的方法。

在我的情況下,它使用了一個無法序列化的複雜對象。

祝你好運!

+0

我不明白這是如何解決這個確切的問題,而是解決所有問題。你可以說得更詳細點嗎? – 2017-05-08 09:30:33

+0

重點羅布是這個問題是由很多種原因造成的,我花了兩個多小時試圖找到沒有運氣的原因,這就是爲什麼我使用這種技術。我意識到一旦你發現導致問題的方法,就很容易找出原因。 – 2017-05-10 07:45:42

0

我也在跟蹤日誌中有同樣的錯誤。我在API中新創建的函數拋出了同樣的錯誤,但令我驚訝的是,舊函數表現良好。 問題是 - 我的合同數據成員幾乎沒有類型對象的變量。 soap-xml無法很好地處理它,但是,我可以看到,對象類型數組(對象[])正在通過,沒有任何問題。只有一個簡單的對象類型沒有被soap解析。這可能是服務拋出上述錯誤的另一個原因。

相關問題