Тип содержимого application / 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
    at org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:89)
    at org.apache.axis2.engine.Phase.invoke(Phase.java:333)
    at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:264)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:163)
    at org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:136)
    at org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:130)
    at org.apache.axis2.transport.http.AxisServlet$RestRequestProcessor.processURLRequest(AxisServlet.java:829)
    at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:255)
    at com.rm.janus.webservice.GroupCallServlet.doGet(GroupCallServlet.java:33)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    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:UserssDocumentsVisual Studio 2012ProjectsG2TestAppInetgrisG2TestAppService ReferencesG2ServiceReferenceReference.cs:line 2981
   at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortTypeClient.getStudentData(ServiceRequest serviceReq) in c:UserssDocumentsVisual Studio 2012ProjectsG2TestAppG2TestAppService ReferencesG2ServiceReferenceReference.cs:line 2987
   at InetgrisG2TestApp.Program.Main(String[] args) in c:UserssDocumentsVisual Studio 2012ProjectsG2TestAppG2TestAppProgram.cs:line 57}

8 ответов


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

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

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

EDIT:

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


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

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

надеюсь, что это помогает.


на всякий случай...
Если вы используете SoapUI Mock Service (как сервер), вызывая его из C# 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).

отредактируйте свой макет ответа в SoapUI и добавьте к нему заголовок: enter image description here

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


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

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


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

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

тип содержимого text / html; charset=utf-8 ответного сообщения

но когда я использовать


в моем случае это была просто ошибка в интернете.конфиг.

Я:

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

это должно было быть:

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

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


Это может быть ошибка в интернете.конфигурационный файл.

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

http://localhost:61277/Email.svc

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

HTTP Error 500.19 - Internal Server Error

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

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

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


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

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