Тип вмісту text / xml; charset = utf-8 сервіс не підтримував


74

У мене проблема з послугою 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.

Відповіді:


150

Перший хіт Google каже:

це, як правило, невідповідність прив'язок клієнт / сервер, де версія повідомлення в службі використовує SOAP 1.2 (який очікує application / soap + xml), а версія клієнта використовує SOAP 1.1 (який надсилає текст / xml). WSHttpBinding використовує SOAP 1.2, BasicHttpBinding використовує SOAP 1.1.

Зазвичай це, здається, wsHttpBinding з одного боку і basicHttpBinding з іншого.


У мене така сама проблема. Мій web.config перераховує 2 кінцеві точки, першу address="basic" binding="basicHttpBinding"та другу address="secure" binding="basicHttpsBinding", але коли я намагаюся додати посилання на служби у Visual Studio, то я отримую помилку.
PedroC88,

2
@ PedroC88, тому я не можу сказати, що не так. Спробуйте відкрити власне запитання, але обов’язково покажіть усі відповідні конфігурації та кроки, які ви пробували, наприклад, чи можете ви відвідати URL-адресу служби з браузера та чи може WcfTestClient.exe отримати доступ до служби.
CodeCaster

Для мене я скопіював посилання шляху до кінцевої точки метаданих, а не до свого основного прив'язки http, коли отримав цю помилку
Ів Рошон,

17
Ця публікація зараз є першим хітом Google :-D
Енді,

А також ця помилка може з’явитися, якщо повне ім’я та назва розділу служби не збігаються. Перевірте, що <service name = "ServiceNamespace.ServiceClassName">
Фрагмент

25

Не забудьте також перевірити код прив'язок. Отже, якщо ви написали:

BasicHttpBinding binding = new BasicHttpBinding();

Переконайтеся, що всі ваші app.configфайли містять

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

не той

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

або так.


8

Я бачив таку поведінку сьогодні, коли

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

відсутній у web.config. service.svcФайл був там і був поданий. Минув деякий час, щоб зрозуміти, що проблема полягала не в конфігурації прив'язки, яку вона сама ...


3

Я побачив цю проблему сьогодні, намагаючись створити проксі-сервіс WCF, як за допомогою VS2010, так і svcutil.

Все, що я роблю, - це basicHttpBinding(тому жодної проблеми wsHttpBinding).

Вперше у своєму спогаді MSDN насправді надав мені рішення за таким посиланням: Як: Опублікувати метадані для служби за допомогою файлу конфігурації . Рядок, який мені потрібно було змінити, знаходився всередині елемента поведінки в елементі поведінки служби MEX у моєму файлі service.config. Я змінив його з

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

і подібно до магії помилка зникла, і я зміг створити сервісний проксі. Зверніть увагу, що існує відповідний запис MSDN для використання коду замість конфігураційного файлу: Як: Опублікувати метадані для служби, що використовує код.

(Звичайно, Policy15 - як я міг це пропустити ???)

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


1

Я стикався з подібною проблемою під час використання Channel Factory. це насправді було пов’язано з неправильним контрактом, зазначеним у кінцевій точці.


1

Для тих, хто приземляється тут за допомогою пошуку:

тип вмісту 'application / json; charset = utf-8 'не був очікуваним типом' text / xml; charset = utf-8

або якусь підмножину цієї помилки:

Подібна помилка була спричинена у моєму випадку шляхом створення та запуску служби без належних атрибутів. Я отримав це повідомлення про помилку, коли намагався оновити посилання на службу в моїй клієнтській програмі. Це було вирішено, коли я правильно застосував [DataContract]та [DataMember]атрибути до своїх користувацьких класів.

Це, швидше за все, було б застосовано, якщо ваша служба була налаштована і працює, а потім вона зламалася після того, як ви її відредагували.


Це саме те, що трапилося зі мною, після додавання правильних атрибутів до всіх нових DTO це спрацювало миттєво
00110001

0

Нещодавно я також стикався з тією ж проблемою. після труднощів через пару годин, нарешті, рішення вийшло додатково до

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" 

і тепер ви можете скомпілювати та запустити свою програму успішно.


0

Знову ж таки, я наголошую, що простір імен, ім’я svc та контракт повинні бути правильно вказані у файлі web.config:

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

Приклад:

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

(Нерелевантні теги, опущені в цих зразках)


0

У моєму випадку, я повинен був вказати 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. Сподіваюся, це допомагає іншим :)


0

У мене була ця помилка, і всі згадані вище конфігурації були правильними, однак я все ще отримував помилку " Прив'язка клієнта та служби може бути невідповідною ".

Що вирішило мою помилку, це збіг значень атрибутів messageEncoding у наступному вузлі службових та клієнтських конфігураційних файлів. Вони були різними в моєму, сервіс - Текстовий і клієнт Mtom . Змінивши службу на Mtom відповідно до клієнтської, вирішено проблему.

<configuration>
  <system.serviceModel>
      <bindings>
           <basicHttpBinding>
              <binding name="BasicHttpBinding_IMySevice" ... messageEncoding="Mtom">
              ...
              </binding>
           </basicHttpBinding>
      </bindings>
  </system.serviceModel>
</configuration>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.