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


74

我对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.

Answers:


150

第一次Google命中说:

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

通常一侧似乎是wsHttpBinding,而另一侧是basicHttpBinding。


我遇到同样的问题。我的web.config列出了两个端点,第一个address="basic" binding="basicHttpBinding"和第二个address="secure" binding="basicHttpsBinding",但是当我尝试在Visual Studio中添加服务引用时,出现错误。
PedroC88

2
@ PedroC88从那里我不能告诉你是怎么回事。请尝试打开您自己的问题,但请确保显示您尝试过的所有相关配置和步骤,例如,是否可以从浏览器访问该服务的URL,以及WcfTestClient.exe是否可以访问该服务。
CodeCaster 2012年

对我来说,出现此错误时,我已将路径链接复制到我的元数据端点,而不是我的基本http绑定
Yves Rochon 2013年

17
此帖现在是第一个Google热门歌曲:-D
Andy

如果您的服务全名和服务部分名称不匹配,也会出现此错误。检查<service name =“ ServiceNamespace.ServiceClassName”>
片段

25

不要忘记也检查与绑定相关的代码。因此,如果您写道:

BasicHttpBinding binding = new BasicHttpBinding();

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

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

不是

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

或者。


8

今天,当我看到

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

从web.config中丢失。该service.svc文件在那里,得到了服务。花了一段时间才意识到问题并不在于绑定配置本身。


3

今天,当我尝试同时使用VS2010和svcutil创建WCF服务代理时,我看到了此问题。

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

在我的回忆中,MSDN首次在以下链接如何为我提供了解决方案:如何:使用配置文件发布服务的元数据。我需要更改的行位于服务app.config文件中MEX服务行为元素内的behavior元素内。我从

&lt;serviceMetadata httpGetEnabled="true"/>  
to  
&lt;serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>

就像魔术一样,错误消失了,我得以创建服务代理。请注意,存在一个使用代码而不是配置文件的相应MSDN条目:如何:使用代码发布服务的元数据。

(当然,Policy15-我怎么可能忽略了它???)

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



1

对于通过搜索落入此处的任何人:

内容类型'application / json; charset = utf-8'不是预期的类型'text / xml;字符集= utf-8

或该错误的某些子集:

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

如果您的服务已设置并正常运行,然后在您对其进行编辑后就中断了,则很可能适用。


这就是发生在我身上的事情,在为所有新的DTO添加了正确的属性之后,它立即
起作用

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" 

现在您可以成功编译并运行您的应用程序了。


0

再次强调,必须在web.config文件中正确指定名称空间,svc名称和协定:

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

例:

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

(这些示例中省略了不相关的标签)


0

就我而言,我必须指定messageEncodingMTOM的app.config像客户端应用程序的:

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


0

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

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

<configuration>
  <system.serviceModel>
      <bindings>
           <basicHttpBinding>
              <binding name="BasicHttpBinding_IMySevice" ... messageEncoding="Mtom">
              ...
              </binding>
           </basicHttpBinding>
      </bindings>
  </system.serviceModel>
</configuration>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.