我遇到了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.
答案 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服务行为元素内的行为元素内。我从
改变了它<serviceMetadata httpGetEnabled="true"/>
to
<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>