内容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服务行为元素内的行为元素内。 我改变了它
<serviceMetadata httpGetEnabled="true"/> to <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>
(在这些示例中,不相关的标签已被忽略)