4

我有我的 WCF 服务,我从 MSTest 项目创建了对它的引用。这是我如何调用服务方法的示例:

IEnrollmentService serviceClient = ChannelFactory<IEnrollmentService>
    .CreateChannel(new BasicHttpBinding(),
                   new EndpointAddress("http://localhost/EnrollmentService.svc"));

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

我没有执行,而是出现以下错误:

内容类型application/xml;响应消息的 charset=utf-8 与绑定的内容类型不匹配 (text/xml; charset=utf-8)。如果使用自定义编码器,请确保正确实现 IsContentTypeSupported 方法。响应的前 710 个字节是:'Sendera:ActionNotSupported由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action '' 的消息。这可能是因为合约不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。---> System.Net.WebException:远程服务器返回错误:(500)内部服务器错误..

据我了解,ContractFilter 和 EndpointDispatcher 之间存在一些问题。我试过goodgle,但没有发现任何可以理解的......

我还尝试以另一种方式调用 wcf 服务方法:

EnrollmentServiceClient serviceClient = new EnrollmentServiceClient("http://localhost/EnrollmentService.svc");

PublishResult res = serviceClient.PublishEnrollmentProfile(...);

这给我带来了另一个错误:

在 ServiceModel 客户端配置部分中找不到名为“ http://localhost/McActivation/EnrollmentService.svc ”和合同“EnrollmentServiceReference.IEnrollmentService”的端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。

问题1:

实例化 wcf 服务客户端的正确方法是什么?

问题2:

我的情况有什么问题?

非常感谢。

PS 对于一些问题,我可以使用 WcfTestClient 连接到服务,更多详细信息在这里: WCF 服务:无法通过“WebHttpBinding”端点调用方法

PPS 这里是服务器端 WCF 服务配置:

<system.serviceModel>
<services>
  <service name="McActivationApp.EnrollmentService" behaviorConfiguration="McActivationApp.EnrollmentServicBehavior">
    <endpoint address="" binding="webHttpBinding" contract="McActivationApp.IEnrollmentService"/>
    <endpoint address="mex" binding="mexHttpBinding" contract="McActivationApp.IEnrollmentService" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="McActivationApp.EnrollmentServicBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
4

1 回答 1

8

您的问题是:您的服务配置定义了一个webHttpBinding端点 - 这是一个REST(“Xml-over-HTTP”)端点......

然而,您的客户端使用 abasicHttpBinding并且这是一个SOAP绑定——它们兼容!

您需要对此进行更改以确保服务端提供的服务端点是客户端可以连接到它的。

所以:

  • 使用 将另一个端点添加到您的服务配置basicHttpBinding并连接到该端点

或者:

  • 更改您的客户端以使用webHttpBinding
于 2011-01-10T17:11:09.927 回答