WCF:无法调用自己的WCF服务

时间:2011-01-10 16:51:57

标签: .net wcf wcfserviceclient

我有我的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带有的消息   行动''无法处理   接收者,由于ContractFilter   EndpointDispatcher不匹配。   这可能是因为a   合同不匹配(不匹配的行动   发送者和接收者之间)或a   绑定/安全性不匹配   发件人和接收者。检查一下   发送者和接收者都一样   合同和相同的约束力   (包括安全要求,例如   消息,运输,   没有)。'。 ---&GT;   System.Net.WebException:远程   服务器返回错误:(500)   内部服务器错误..

据我所知,ContractFilter和EndpointDispatcher之间存在一些问题。我试图改善,但发现没什么可以理解的......

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

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

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

这又回到了我的另一个错误:

  

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

问题1:

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

Questions2:

我的情况有什么问题?

非常感谢。

P.S。有些问题我可以通过WcfTestClient连接到服务,更多细节在这里: WCF service: Can't call methods through the 'WebHttpBinding' endpoint

P.P.S。这是服务器端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>

1 个答案:

答案 0 :(得分:8)

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

然而,您的客户使用basicHttpBinding这是 SOAP 绑定 - 这些兼容!

您需要对此进行更改,以确保服务端提供的服务端点能够与客户端连接。

所以:

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

或:

  • 将您的客户端更改为使用webHttpBinding