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 службы. Я изменил его с
<serviceMetadata httpGetEnabled="true"/>
to
<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.
Я надеюсь, что это помогает другим :)