Тип содержимого text / xml; charset = utf-8 не поддерживался службой

У меня проблема со службой WCF. У меня есть консольное приложение, и мне нужно использовать службу без использования app.config, поэтому мне пришлось установить конечную точку и т. Д. С помощью кода. У меня есть служебная ссылка на svc, но я не могу использовать app.config. Вот мой код:

BasicHttpBinding binding = new BasicHttpBinding();

EndpointAddress address = new EndpointAddress("http://localhost:8731/WcfServicio/MiServicio");

MiServicioClient svc = new MiServicioClient(binding, address);
object ob = svc.PaisesObtener();

В последней строке, когда я делаю svc.PaisesObtener(), я получаю сообщение об ошибке:

Content Type text/xml; charset=utf-8 was not supported by service
http://localhost:8731/WcfServicio/MiServicio.  The client and service bindings may be mismatched.

person user1055483    schedule 23.11.2011    source источник


Ответы (10)


Первый хит Google говорит:

обычно это несоответствие в привязках клиент / сервер, где версия сообщения в службе использует SOAP 1.2 (который ожидает application / soap + xml), а версия в клиенте использует SOAP 1.1 (который отправляет текст / xml). WSHttpBinding использует SOAP 1.2, BasicHttpBinding использует SOAP 1.1.

Обычно это wsHttpBinding с одной стороны и basicHttpBinding с другой.

person CodeCaster    schedule 23.11.2011
comment
У меня такая же проблема. В моем web.config перечислены 2 конечные точки, первая address="basic" binding="basicHttpBinding" и вторая address="secure" binding="basicHttpsBinding", но когда я пытаюсь добавить ссылку на службу в Visual Studio, я получаю сообщение об ошибке. - person PedroC88; 01.10.2012
comment
@ PedroC88 от этого я не могу сказать, что не так. Попробуйте открыть свой вопрос, но обязательно покажите всю соответствующую конфигурацию и шаги, которые вы пробовали, например, можете ли вы посетить URL-адрес службы из браузера и может ли WcfTestClient.exe получить доступ к службе. - person CodeCaster; 01.10.2012
comment
Что касается меня, я скопировал ссылку на путь к моей конечной точке метаданных вместо моей базовой привязки http, когда я получил эту ошибку - person Yves Rochon; 01.10.2013
comment
Этот пост стал первым хитом Google :-D - person Andy; 12.05.2014
comment
А также эта ошибка может появиться, если ваше полное имя службы и название раздела службы не совпадают. Убедитесь, что ‹service name = ServiceNamespace.ServiceClassName› - person Fragment; 03.03.2015
comment
Спасибо тебе за это. Это должно стать ответом! - person Pieter Vandenheede; 02.09.2017
comment
Любое оформление для .Net Core? Он не поддерживает wsHttpBinding. - person Afshar Mohebi; 05.09.2020

Не забудьте также проверить код, связанный с привязками. Итак, если вы написали:

BasicHttpBinding binding = new BasicHttpBinding();

Убедитесь, что все ваши app.config файлы содержат

<endpoint address="..."
          binding="basicHttpBinding" ...

не

<endpoint address="..."
          binding="wsHttpBinding" ...

or so.

person mykola.rykov    schedule 21.02.2012
comment
Обновление конфигурации (с wsHttpBinding по basicHttpBinding) было для меня билетом. Спасибо! - person Dan Sinclair; 23.07.2021

Я видел такое поведение сегодня, когда

   <service name="A.B.C.D" behaviorConfiguration="returnFaults">
        <endpoint contract="A.B.C.ID" binding="basicHttpBinding" address=""/>
    </service>

отсутствовал в web.config. Файл service.svc был там, и его обслужили. Потребовалось время, чтобы понять, что проблема не в самой конфигурации привязки ...

person rene    schedule 20.06.2013

Я увидел эту проблему сегодня, когда пытался создать прокси-сервер службы WCF, используя как VS2010, так и svcutil.

Все, что я делаю, это basicHttpBinding (так что с wsHttpBinding проблем нет).

Впервые на моей памяти MSDN фактически предоставил мне решение по следующей ссылке Как: публиковать метаданные для службы с помощью файла конфигурации. Строка, которую мне нужно было изменить, находилась внутри элемента поведения внутри элемента поведения службы MEX внутри моего служебного файла app.config. Я изменил это с

<serviceMetadata httpGetEnabled="true"/>  

to

<serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>

и, как по волшебству, ошибка исчезла, и я смог создать прокси службы. Обратите внимание, что существует соответствующая запись MSDN для использования кода вместо файла конфигурации: Как: публиковать метаданные для службы с помощью кода.

(Конечно, Policy15 - как я мог это не заметить ???)

Еще одна проблема: мой сервис должен предоставлять 3 разных конечных точки, каждая из которых поддерживает разные контракты. Для каждого прокси, который мне нужно было создать, мне пришлось закомментировать две другие конечные точки, иначе svcutil будет жаловаться, что не может разрешить базовый URL-адрес.

person D. Diamond    schedule 24.04.2015

Я столкнулся с аналогичной проблемой при использовании фабрики каналов. на самом деле это произошло из-за неправильного контракта, указанного в конечной точке.

person Sumit Agrawal    schedule 05.05.2016

Для всех, кто попадает сюда через поиск:

тип содержимого 'application / json; charset = utf-8 'не был ожидаемым типом' text / xml; charset = utf-8

или какое-то подмножество этой ошибки:

В моем случае аналогичная ошибка была вызвана созданием и запуском службы без соответствующих атрибутов. Я получил это сообщение об ошибке, когда попытался обновить ссылку на службу в моем клиентском приложении. Это было решено, когда я правильно применил атрибуты [DataContract] и [DataMember] к своим пользовательским классам.

Скорее всего, это применимо, если ваша служба была настроена и работала, а затем сломалась после того, как вы ее отредактировали.

person Corey    schedule 18.07.2016
comment
Это именно то, что случилось со мной, после добавления правильных атрибутов ко всем новым DTO, он сработал мгновенно. - person TheGeneral; 15.01.2017

Недавно я столкнулся с той же проблемой. после нескольких часов борьбы, наконец, появилось решение путем добавления к

Factory="System.ServiceModel.Activation.WebServiceHostFactory"
to your SVC markup file. e.g.
ServiceHost Language="C#" Debug="true" Service="QuiznetOnline.Web.UI.WebServices.LogService" 
Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

и теперь вы можете успешно скомпилировать и запустить свое приложение.

person Anver Sadat    schedule 26.05.2015

Опять же, я подчеркиваю, что пространство имен, имя svc и контракт должны быть правильно указаны в файле web.config:

 <service name="NAMESPACE.SvcFileName">
    <endpoint contract="NAMESPACE.IContractName" />
  </service>

Пример:

<service name="MyNameSpace.FileService">
<endpoint contract="MyNameSpace.IFileService" />
</service>

(Нерелевантные теги в этих примерах опущены)

person alexkovelsky    schedule 03.10.2016

В моем случае мне пришлось указать messageEncoding на Mtom в app.config клиентского приложения следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="IntegrationServiceSoap" messageEncoding="Mtom"/>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:29495/IntegrationService.asmx"
                binding="basicHttpBinding" bindingConfiguration="IntegrationServiceSoap"
                contract="IntegrationService.IntegrationServiceSoap" name="IntegrationServiceSoap" />
        </client>
    </system.serviceModel>
</configuration>

И мой клиент, и сервер используют basicHttpBinding. Надеюсь, это поможет другим :)

person Recev Yildiz    schedule 23.05.2018

У меня была эта ошибка, и все конфигурации, упомянутые выше, были правильными, однако я все еще получал ошибку Возможно несоответствие привязок клиента и службы.

Что разрешило мою ошибку, так это совпадение значений атрибута messageEncoding в следующем узле файлов конфигурации службы и клиента. У меня они были разные, сервис был Text, а клиентский Mtom. Смена сервиса на Mtom в соответствии с клиентским, решила проблему.

<configuration>
  <system.serviceModel>
      <bindings>
           <basicHttpBinding>
              <binding name="BasicHttpBinding_IMySevice" ... messageEncoding="Mtom">
              ...
              </binding>
           </basicHttpBinding>
      </bindings>
  </system.serviceModel>
</configuration>
person SouthSun    schedule 29.06.2020