Приложение типа контента /xml; charset = utf-8 ответного сообщения не соответствует типу содержимого привязки (text/xml; charset = utf-8)

Я пытаюсь использовать веб-службу WCF, используя автономное приложение. Я могу просмотреть эту услугу, используя Internet Explorer, которая также может просматривать ссылки на Visual Studio.

Это ошибка, которую я получаю

The content type text/html; charset=UTF-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8).

Как изменить это, чтобы использовать правильный тип контента?

Вот мой файл конфигурации

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="G2WebServiceSoap11Binding" />
        </basicHttpBinding>
        <customBinding>
            <binding name="G2WebServiceSoap12Binding">
                <textMessageEncoding messageVersion="Soap12" />
                <httpTransport />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://XXX.XX.XX.XX:XX/janus/services/G2WebService.G2WebServiceHttpSoap11Endpoint/"
            binding="basicHttpBinding" bindingConfiguration="G2WebServiceSoap11Binding"
            contract="G2ServiceReference.G2WebServicePortType"
            name="G2WebServiceHttpSoap11Endpoint" />
        <endpoint address="http://XXX.XX.XX.XX:XX/janus/services/G2WebService.G2WebServiceHttpSoap12Endpoint/"
            binding="customBinding" bindingConfiguration="G2WebServiceSoap12Binding"
            contract="G2ServiceReference.G2WebServicePortType"
            name="G2WebServiceHttpSoap12Endpoint" />
    </client>
</system.serviceModel>

здесь находится стек

{System.ServiceModel.ProtocolException: The content type application/xml;charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. 
The first 1024 bytes of the response were: '<Exception>org.apache.axis2.AxisFault: The endpoint reference (EPR) for the Operation not found is /janus/services/G2WebService and the WSA Action = null&#xd;
    at org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:89)&#xd;
    at org.apache.axis2.engine.Phase.invoke(Phase.java:333)&#xd;
    at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:264)&#xd;
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:163)&#xd;
    at org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:136)&#xd;
    at org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:130)&#xd;
    at org.apache.axis2.transport.http.AxisServlet$RestRequestProcessor.processURLRequest(AxisServlet.java:829)&#xd;
    at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:255)&#xd;
    at com.rm.janus.webservice.GroupCallServlet.doGet(GroupCallServlet.java:33)&#xd;
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)&#xd;
    at javax.servlet.http.HttpSer'. ---> System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
   at System.Net.HttpWebRequest.GetResponse()
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   --- End of inner exception stack trace ---

Server stack trace: 
   at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding)
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortType.getStudentData(getStudentDataRequest request)
   at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortTypeClient.G2TestApp.G2ServiceReference.G2WebServicePortType.getStudentData(getStudentDataRequest request) in c:\Users\s\Documents\Visual Studio 2012\Projects\G2TestApp\InetgrisG2TestApp\Service References\G2ServiceReference\Reference.cs:line 2981
   at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortTypeClient.getStudentData(ServiceRequest serviceReq) in c:\Users\s\Documents\Visual Studio 2012\Projects\G2TestApp\G2TestApp\Service References\G2ServiceReference\Reference.cs:line 2987
   at InetgrisG2TestApp.Program.Main(String[] args) in c:\Users\s\Documents\Visual Studio 2012\Projects\G2TestApp\G2TestApp\Program.cs:line 57}

Ответ 1

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

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

TL;DR: Существует несколько возможных конфигураций для страниц ошибок. Если вы размещаете в IIS, вам нужно удалить раздел <httpErrors> из файла службы WCF web.config. Если нет, предоставьте подробную информацию о вашем сценарии хостинга, и я могу придумать редактирование, чтобы соответствовать им.

EDIT:

Увидев ваше редактирование, вы увидите, как возвращается полная ошибка. Apache не может определить, какую услугу вы хотите вызвать, и по этой причине выдает ошибку. Служба будет работать нормально, если у вас есть правильная конечная точка - вы указали на неправильное местоположение. К сожалению, я не могу сообщить из имеющейся информации, что такое правильное местоположение, но либо ваше действие (в настоящее время null!), Либо URL-адрес неверен.

Ответ 2

Когда я столкнулся с этой ошибкой, я часами пытался найти решение.

Моя проблема заключалась в том, что когда я пошел, чтобы сохранить файл, я случайно ударил по клавише "G" в файле web.config. У меня был отстраненный характер, который просто сидел на улице, поэтому web.config не знал, как интерпретировать неверно отформатированные данные.

Надеюсь, что это поможет.

Ответ 3

На всякий случай...
Если вы используете SoapUI Mock Service (как сервер), вызывая его из С# WCF:

WCF --> SoapUI MockService

И в этом случае вы получаете ту же ошибку:

The content type text/html; charset=UTF-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8).

Отредактируйте свой Mock Response в SoapUI и добавьте к нему заголовок: введите описание изображения здесь

В моем сценарии это устраняет проблему.

Ответ 4

Мы используем расширение Url Rewrite для IIS для перенаправления всех HTTP-запросов на HTTPS. При попытке вызвать службу, не использующую транспортную безопасность по адресу http://..., это ошибка, которая появилась.

Таким образом, может быть стоит проверить, можете ли вы ударить по http и https-адресам службы через браузер и что он не переадресовывает вас с кодом статуса 303.

Ответ 5

В сериальном проекте WCF эта проблема может быть вызвана ссылкой на System.Web.Mvc.dll в другой версии или может быть любая другая проблема с другой версией DLL. Таким образом, это может быть проблема совместимости с DLL-версией, отличной от версии

Когда я использую

System.Web.Mvc.dll версия 5.2.2.0 → содержит текст Ошибка Текст типа содержимого /html; charset = utf-8 ответного сообщения

но когда я использую

System.Web.Mvc.dll версия 4.0.0.0 или ниже → Это отлично работает в моем проекте и не имеет ошибки.

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

Эта ошибка даже генерируется при добавлении ссылки другого проекта в проект WCF, и этот справочный проект имеет другую версию DLL System.Web.Mvc или может быть любой другой DLL.

Ответ 6

В моем случае это была просто ошибка в файле web.config.

У меня было:

<endpoint address="http://localhost/WebService/WebOnlineService.asmx" 

Должно быть:

<endpoint address="http://localhost:10593/WebService/WebOnlineService.asmx"

Номер порта (: 10593) отсутствует с адреса.

Ответ 7

Это может быть ошибка в файле web.config.

Откройте свой URL в своем браузере, например:

http://localhost:61277/Email.svc

Проверьте, есть ли у вас ошибка 500.

HTTP Error 500.19 - Internal Server Error

Посмотрите на ошибку в этих разделах:

Ошибка конфигурации

Файл конфигурации

Ответ 8

Попробуйте просмотреть WCF в IIS, посмотрите, жив ли он и работает нормально,

В моем случае это потому, что физический путь WCF неверно перенаправлен.