内容typestext / xml; charset = utf-8不被服务支持

我有一个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. 

首先谷歌命中说:

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

它通常似乎是一方的wsHttpBinding,另一方面是基本的HttpBinding。

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

 BasicHttpBinding binding = new BasicHttpBinding(); 

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

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

不是

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

或者。

我今天看到这种行为的时候了

  <service name="ABCD" behaviorConfiguration="returnFaults"> <endpoint contract="ABCID" binding="basicHttpBinding" address=""/> </service> 

从web.config中丢失。 service.svc文件在那里,得到了服务。 它花了一段时间才意识到,问题不在绑定configuration它自己…

当我尝试创build一个使用VS2010和svcutil的WCF服务代理时,我今天看到了这个问题。

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

第一次在我的记忆MSDN实际上提供给我的解决scheme,在以下链接如何:使用configuration文件发布服务的元数据 。 我需要更改的行是在我的服务app.config文件中的MEX服务行为元素内的行为元素内。 我改变了它

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

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

(当然,政策15–我怎么可能忽略这个?)

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

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

对于通过search来到这里的任何人:

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

或者该错误的一些子集:

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

如果你的服务被设置好并且正在工作,那么这很可能是适用的,然后在你编辑它之后就会崩溃。

我最近也遇到同样的问题。 经过几个小时的挣扎后,终于有了一个解决scheme

 Factory="System.ServiceModel.Activation.WebServiceHostFactory" to your SVC markup file. eg ServiceHost Language="C#" Debug="true" Service="QuiznetOnline.Web.UI.WebServices.LogService" Factory="System.ServiceModel.Activation.WebServiceHostFactory" 

现在你可以编译和运行你的应用程序成功。

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

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

例:

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

(在这些示例中,不相关的标签已被忽略)