我对WCF服务配置的问题感到困惑。 我有以下配置:
<behaviors>
<serviceBehaviors>
<behavior name="SampleWebBehavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
<behavior name="MyServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false"/>
它工作得很好,我可以尝试WcfTestClient.exe的方法,并得到正确的答案。但我需要绑定为webHttpBinding,所以我可以在浏览器中看到结果并创建JSON请求和响应。 但是当我将绑定更改为 webHttpBinding 时,它会抛出错误:
由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理带有Action''的消息。这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配。检查发件人和收件人是否具有相同的合同和相同的约束(包括安全要求,例如邮件,传输,无)。
请求任何帮助。
答案 0 :(得分:1)
要解决此问题,您需要在配置中执行一些操作
1)将另一个端点添加到您的服务中,您可以在下面看到我同时具有basicHttp和webHttp
<system.serviceModel>
<services>
<service name="<serivceclass>" behaviorConfiguration="DefaultBehavior">
<endpoint binding="basicHttpBinding" contract="<serviceinterface>" bindingConfiguration="soapBinding"/>
<endpoint address="json" binding="webHttpBinding" behaviorConfiguration="jsonBehavior" contract="<serviceinterface>" bindingConfiguration="jsonBinding"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</system.serviceModel>
2)添加你的绑定配置(再次你会看到web和basichttp)
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="soapBinding" maxBufferPoolSize="9000000" maxBufferSize="9000000" maxReceivedMessageSize="9000000">
<readerQuotas maxArrayLength="9000000" maxBytesPerRead="9000000" maxDepth="9000000" maxNameTableCharCount="9000000" maxStringContentLength="9000000"/>
<security mode="None">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
<webHttpBinding>
<binding name="jsonBinding">
<security mode="None">
<transport clientCredentialType="None"/>
</security>
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>
3)设置行为 - 注意名称以及它们与步骤1中列出的端点的关联方式
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="jsonBehavior">
<webHttp defaultOutgoingResponseFormat="Json" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="DefaultBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="9000000" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
虽然我启用和配置的一些东西是可选的,但这允许你以两种方式访问服务,一种方式使用web和json的东西,另一种使用visual studio中内置的工具,当你不在javascript等工作时。
注意1:使用json部分时的端点将是例如http://myhost.com/myservice.svc/json/MyMethodName,您可以通过修改服务的相应端点行上的“address”属性来更改此端点(请参阅基本地址如何为空而webHttp是'json')
答案 1 :(得分:0)
此错误来源的一种可能性是:当您更改配置时,您在服务器或客户端上进行了更改,但两者都没有。服务器和客户端上的配置必须匹配。