Content Type 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.

Ответ 1

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

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

Обычно это похоже на wsHttpBinding с одной стороны и basicHttpBinding на другом.

Ответ 2

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

BasicHttpBinding binding = new BasicHttpBinding();

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

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

не

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

или так.

Ответ 3

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

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

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

Ответ 4

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

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

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

&lt;serviceMetadata httpGetEnabled="true"/>  
to  
&lt;serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>

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

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

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

Ответ 5

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

Ответ 6

Для тех, кто приземляется здесь, ища:

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

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

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

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

Ответ 7

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

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" 

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

Ответ 8

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

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

Пример:

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

(Несогласованные теги, пропущенные в этих образцах)

Ответ 9

В моем случае мне пришлось указать 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. Я надеюсь, что это помогает другим :)