Подтвердить что ты не робот

Content Type application/soap + xml; charset = utf-8 не поддерживается службой

Я получаю ошибку ниже ошибки при попытке добавить службу WCF в WCFTestClient. Я просмотрел ряд решений в Интернете, но я не мог заставить его работать.

Может кто-нибудь помочь мне с проблемами? Я также предоставляю свой файл конфигурации для обслуживания:

Приложение типа контента/мыло + xml; charset = utf-8 не поддерживался сервис. Связи клиента и службы могут быть несовместимы. удаленный сервер ответил на ошибку: (415) Не удалось обработать сообщение потому что тип контента "application/soap + xml"; charset = utf-8 'не было ожидаемый тип text/xml; кодировка = 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 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>
4b9b3361

Ответ 1

Я столкнулся с проблемой именования. Название сервиса должно быть точно именем вашей реализации. Если он не basicHttpBinding по умолчанию используется 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

Вот пример web.config, который решает проблему для меня. Обратите внимание на сообщение name= "TransportSecurity". Текстовое кодирование = "Текст" textEncoding = "utf-8" >

Ответ 3

У меня была такая же проблема, она работала, "привязывая" службу к поведению службы, делая это:

Дано имя для поведения

<serviceBehaviors>
        <behavior name="YourBehaviourNameHere">

И сделайте ссылку на свое поведение в своем сервисе

<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 
  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>

Ответ 4

В моем случае один из классов не имел конструктора по умолчанию - и класс без конструктора по умолчанию не может быть сериализован.

Ответ 5

Как говорили другие, это происходит из-за несоответствия клиента сервиса.

Я столкнулся с той же проблемой, когда отладка узнала, что в привязке есть несоответствие. Вместо WSHTTPBinding я имел в виду BasicHttpBinding. В моем случае я имею в виду и BasicHttp, и WsHttp. Я динамически назначал привязку на основе ссылки. Так что проверьте ваш сервис конструктор.

Проверьте ваш конструктор сервиса один раз. Проверьте изображение ниже

Ответ 6

Эта ошибка может возникнуть, когда клиент WCF пытается отправить свое сообщение, используя MTOM extension (MIME type application/soap+xml, используется для передачи SOAP XML in MTOM), но служба просто может понять нормальные SOAP-сообщения (она не содержит частей MIME, только text/xml в HTTP-запросе).

Убедитесь, что вы создали код клиента с правильным WSDL.

Чтобы использовать MTOM на стороне сервера, измените свой файл конфигурации, добавив атрибут messageEncoding:

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

Ответ 7

В моем случае было другое решение. Клиент использовал basichttpsbinding [1], и служба использовала wshttpbinding.

Я решил проблему, изменив привязку сервера к basichttpsbinding. Кроме того, мне пришлось установить целевую структуру в 4.5, добавив:

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

[1] связь была выше https.

Ответ 8

Для меня было очень сложно идентифицировать проблему из-за большого количества используемых методов и классов.

То, что я сделал, прокомментировал (удалил) некоторые методы из интерфейса WebService и попробовал, а затем прокомментировал еще один набор методов и попытался, я продолжал делать это, пока не нашел способ, который вызывает проблему.

В моем случае он использовал сложный объект, который не может быть сериализован.

Удачи!

Ответ 9

В моем случае такая же ошибка была вызвана отсутствием

[DataContract]
...
[DataMember] 

в возвращаемом типе данных.

Проверьте это и попробуйте добавить их и посмотреть, помогает ли это.

Ответ 10

У меня возникло такое же сообщение об ошибке. Мне удалось это исправить:

В моем случае ошибка заключалась в том, что я пропустил атрибуты [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; }

}

Ответ 11

У меня тоже была такая же ошибка в журналах трассировки. Моя недавно созданная функция в API выдала ту же ошибку, но, к моему удивлению, старые функции работали хорошо. Проблема заключалась в том, что в моих членах данных контракта было мало переменных типа object. Мыло-xml не смогло справиться с этим хорошо, однако я вижу, что массив типов объектов (object []) передавался без проблем. Только простой тип объекта не анализировался мылом. Это может быть еще одной причиной, по которой службы генерируют вышеуказанную ошибку.

Ответ 12

Моей проблемой был наш собственный класс коллекции, который был помечен как [DataContract]. С моей точки зрения, это был чистый подход, и он отлично работал с XmlSerializer, но для конечной точки WCF он ломался, и нам пришлось его удалить. XmlSerializer по-прежнему работает без.

Не работает

[DataContract]
public class AttributeCollection : List<KeyValuePairSerializable<string, string>>

За работой

public class AttributeCollection : List<KeyValuePairSerializable<string, string>>

Ответ 13

Я получал ту же ошибку при использовании пружины WebServiceTemplate. Ws [err] org.springframework.ws.client.WebServiceTransportException: Невозможно обработать сообщение, так как тип содержимого 'text/xml; charset = utf-8 'не был ожидаемым типом' application/soap + xml; кодировка = UTF-8'. [415] [err] at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:665). WSDL, который я использовал, имеет протокол soap1.2, и по умолчанию протоколом является soap1.1. Когда я изменил протокол, используя приведенный ниже код, он работал

 MessageFactory msgFactory = MessageFactory.newInstance(javax.xml.soap.SOAPConstants.SOAP_1_2_PROTOCOL);
     SaajSoapMessageFactory saajSoapMessageFactory = new SaajSoapMessageFactory(msgFactory);
     saajSoapMessageFactory.setSoapVersion(SoapVersion.SOAP_12);
     getWebServiceTemplate().setMessageFactory(saajSoapMessageFactory);

Ответ 15

проверьте конфигурационный файл клиента, который был идентифицирован в файле web.config в разделе привязки