内容类型 text/html;响应消息的 charset=UTF-8 与绑定的内容类型不匹配 (text/xml; charset=utf-8)
Posted
技术标签:
【中文标题】内容类型 text/html;响应消息的 charset=UTF-8 与绑定的内容类型不匹配 (text/xml; charset=utf-8)【英文标题】: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) 【发布时间】:2011-07-12 21:34:33 【问题描述】:我创建了 WCF 服务并使用独立应用程序测试 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)."
您能告诉我哪里出了问题吗?
谢谢。
【问题讨论】:
【参考方案1】:由于返回的内容类型是text/html
,我怀疑您的调用会导致 WCF 之外的服务器端错误(您收到的是 HTML 错误页面)。
尝试使用 Web 调试代理(例如 Fiddler)查看响应。
(根据 cmets 编辑):
根据您的 cmets,我发现您的 WCF 托管在 Sharepoint 2010 下,位于经过表单验证的站点中。
您收到的错误是由于您的 WCF 客户端未通过 sharepoint 进行身份验证 - 它没有有效的身份验证 cookie。 Sharepoint 然后返回一个 HTTP 重定向到一个 html 页面(login.aspx 页面);这是您的 WCF 客户端所不期望的。
要更进一步,您必须从 Sharepoint 获取身份验证 cookie(请参阅 Authentication Web Service)并将其传递给您的 WCF 客户端。
(更新编辑):
错误:该网站正在使用基于声明的身份验证。
虽然这不一定是由于 cookie 或表单身份验证,但提供的错误消息的解释保持不变。身份验证问题导致重定向到 WCF 客户端不处理的 HTML 页面。
【讨论】:
抱歉,我花了这么长时间才解决这个问题。谢谢回复。这是来自 Fiddler 的一些数据。 这是来自 Fiddler 的一些数据头。 GET /_vti_bin/psi/helloservice.svc HTTP/1.1 内容类型:文本/xml; charset=utf-8 MicrosoftSharePointTeamServices:14.0.0.4762 服务器:Microsoft-IIS/7.5 X-AspNet-Version:2.0.50727 X-SharePointHealthScore:4 @nav100:尝试运行您的应用程序并在 Fiddler 运行时重现所述错误。您可能需要修改 WCF 客户端端点和配置,以便 WCF 通过 Fiddler 进行连接。 如何通过 Fiddler 进行连接?我输入了server/pwa/_vti_bin/psi/helloservice.svc Fiddler RequestHeader。我得到了同样的信息。 @nav100:如果您在 fiddler 中看到过调用,那么您就可以了。您粘贴的标题报告了Content-Type
的text/xml
;这是我们所期望的。在这些电话中,您是否收到了您在问题中陈述的例外情况?如果没有,你能设法复制它吗?请注意,它们可能是 fiddler 中 WCF 调用的多行。寻找text/html
返回的内容类型并检查内容以获取更多线索。【参考方案2】:
这可能会有所帮助,请检查 ISS 7 中的 url 重写规则。如果您没有正确配置规则,则会出现此问题。
【讨论】:
这是我的问题。我正在将对我的 http wcf 服务的调用重定向到 https 版本。问题(我在 Fiddler 中注意到)是我的服务调用正在接收一个 html 页面,其中包含指向 URL 重写重定向到的 URL 的链接 - 因此接收的是 html 而不是预期的 XML。【参考方案3】:听起来您的应用程序需要 XML,但接收的是纯文本。你传入的是什么类型的对象?
【讨论】:
【参考方案4】:text/html 是 SOAP 1.1 标头和 Content-Type: application/soap+xml 是 SOAP 1.2 验证您的绑定并返回标头。 它应该与 1.1 或 1.2 相同
【讨论】:
【参考方案5】:将以下代码添加到 web.config 服务器项目
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBinding_IService">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="Service">
<endpoint address="" name="BasicHttpBinding_IService"
binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding_IService"
contract="IService" />
</service>
然后更新客户端web服务,更新后对web.config进行如下修改
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService">
<security mode="Transport" />
</binding>
</basicHttpBinding>
</bindings>
<endpoint address="https://www.mywebsite.com/Service.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService"
contract="Service.IService" name="BasicHttpBinding_IService" />
希望对你有用
【讨论】:
以上是关于内容类型 text/html;响应消息的 charset=UTF-8 与绑定的内容类型不匹配 (text/xml; charset=utf-8)的主要内容,如果未能解决你的问题,请参考以下文章
Wcf 服务,我收到此错误:内容类型 text/html;字符集=utf-8
SpringCloud OpenFeign:使用内容类型为 text/html 的响应
表单提交返回内容类型为 application/json 而不是 text/html 的响应