内容类型text / xml;服务不支持charset = utf-8

时间:2011-11-23 23:00:28

标签: wcf endpoint

我遇到了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.

10 个答案:

答案 0 :(得分:135)

首先Google点击说:

  

这通常是客户端/服务器绑定中的不匹配,其中服务中的消息版本使用SOAP 1.2(期望application / soap + xml),而客户端中的版本使用SOAP 1.1(发送text / xml) 。 WSHttpBinding使用SOAP 1.2,BasicHttpBinding使用SOAP 1.1。

一方面似乎通常是wsHttpBinding,另一方面是basicHttpBinding。

答案 1 :(得分:23)

不要忘记检查绑定相关的代码。 所以如果你写了:

BasicHttpBinding binding = new BasicHttpBinding();

确保所有app.config个文件都包含

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

不是

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

左右。

答案 2 :(得分:7)

我今天看到了这种行为

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

service.svc文件在那里并得到了服务。花了一段时间才意识到问题不在它自己的绑定配置中......

答案 3 :(得分:3)

我在尝试使用VS2010和svcutil创建WCF服务代理时看到了这个问题。

我正在做的一切都是basicHttpBinding(所以wsHttpBinding没有问题)。

在我的记忆中,MSDN第一次实际上为我提供了解决方案,位于以下链接How to: Publish Metadata for a Service Using a Configuration File。我需要更改的行是在我的服务app.config文件中的MEX服务行为元素内的行为元素内。我从

改变了它
&lt;serviceMetadata httpGetEnabled="true"/>  
to  
&lt;serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>

和魔术一样,错误消失了,我能够创建服务代理。请注意,使用代码而不是配置文件有相应的MSDN条目:How to: Publish Metadata for a Service Using Code.

(当然,政策15 - 我怎么可能忽略了???)

还有一个“陷阱”:我的服务需要暴露3个不同的端点,每个端点支持不同的合同。对于我需要构建的每个代理,我必须注释掉其他2个端点,否则svcutil会抱怨它无法解析基本URL地址。

答案 4 :(得分:1)

使用Channel Factory时,我遇到了类似的问题。这实际上是由于端点中指定了错误的合同。

答案 5 :(得分:1)

对于任何通过搜索来到这里的人来说:

  

内容类型&#39; application / json;字符集= UTF-8&#39;不是预期的类型&text; / xml;字符集= UTF-8

或该错误的某个子集:

在我的情况下,通过构建和运行没有适当属性的服务导致了类似的错误。当我尝试在客户端应用程序中更新服务引用时收到此错误消息。当我正确地将[DataContract][DataMember]属性应用于我的自定义类时,它已得到解决。

如果您的服务已经设置并正常运行,那么这很可能适用,然后在您编辑它之后就崩溃了。

答案 6 :(得分: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" 

现在你可以编译&amp;成功运行您的应用程序。

答案 7 :(得分:0)

同样,我强调必须在web.config文件中正确指定名称空间,svc名称和合同:

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

示例:

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

(这些样本中省略了不相关的标签)

答案 8 :(得分:0)

就我而言,我必须在客户端应用程序的 app.config 中指定 messageEncoding Mtom ,如下所示:

<?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。 我希望这有助于其他人:)

答案 9 :(得分:0)

我遇到了这个错误,上面提到的所有配置都是正确的,但是我仍然收到“ 客户端和服务绑定可能不匹配 ”错误。

解决我的错误的原因是,在服务和客户端配置文件的以下节点中匹配了 messageEncoding 属性值。它们在我的方面有所不同,服务是 Text 和客户端 Mtom 。将服务更改为Mtom以匹配客户的服务,解决了该问题。

<configuration>
  <system.serviceModel>
      <bindings>
           <basicHttpBinding>
              <binding name="BasicHttpBinding_IMySevice" ... messageEncoding="Mtom">
              ...
              </binding>
           </basicHttpBinding>
      </bindings>
  </system.serviceModel>
</configuration>