我使用独立应用程序创建了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)."
请问您可能会出现什么问题?
谢谢。
答案 0 :(得分:17)
由于返回的内容类型为text/html
,我怀疑您的调用会导致WCF之外的服务器端错误(您收到的是HTML错误页面)。
尝试使用Fiddler等网络调试代理查看响应。
(根据评论编辑):
根据您的评论,我发现您的WCF托管在Sharepoint 2010下,位于经过格式验证的网站中。
您收到的错误是由于您的WCF客户端未使用sharepoint进行身份验证 - 它没有有效的身份验证Cookie。然后Sharepoint将HTTP重定向返回到html页面(login.aspx页面);这是您的WCF客户端不期望的。
为了更进一步,您必须从Sharepoint获取身份验证cookie(请参阅Authentication Web Service)并将其传递给您的WCF客户端。
(更新编辑):
错误:该网站正在使用基于声明的身份验证。
虽然这不一定是由于cookie或表单身份验证,但提供的错误消息的解释保持不变。身份验证问题会导致重定向到HTML页面,而WCF客户端无法处理该页面。
答案 1 :(得分:2)
这可能会有所帮助,请检查IIS 7中的网址重写规则。如果您没有正确配置规则,则会出现此问题。
答案 2 :(得分:0)
听起来您的应用程序期望XML但是接收纯文本。你传入的是什么类型的物体?
答案 3 :(得分:0)
text / html是SOAP 1.1标头,Content-Type:application / soap + xml是SOAP 1.2 验证绑定并返回标头。 它应该是相同的1.1或1.2
答案 4 :(得分:0)
将以下代码添加到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" />
我希望有用