WCF服务:无法通过'WebHttpBinding'端点调用方法

时间:2011-01-10 16:22:12

标签: wcf

我已经创建了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>

我使用WcfTestClient连接到服务,添加了服务并且只能调用“IEnrollmentService(MetadataExchangeHttpBinding_IEnrollmentService)”部分中的方法(它们按预期工作)。

但另一节“IEnrollmentService(WebHttpBinding_IEnrollmentService)”中的方法不可调用。当我尝试调用其中任何一个时,我收到以下错误:

  

无法调用该服务。可能   原因:服务处于脱机状态或   交通不便;客户端   配置不匹配   代理;现有代理无效。   有关更多信息,请参阅堆栈跟踪   详情。你可以尝试恢复   启动新代理,恢复到   默认配置或刷新   服务。

错误详情:

The Address property on ChannelFactory.Endpoint was null.  The ChannelFactory's Endpoint must have a valid Address specified.
   at System.ServiceModel.ChannelFactory.CreateEndpointAddress(ServiceEndpoint endpoint)
   at System.ServiceModel.ChannelFactory`1.CreateChannel()
   at System.ServiceModel.ClientBase`1.CreateChannel()
   at System.ServiceModel.ClientBase`1.CreateChannelInternal()
   at System.ServiceModel.ClientBase`1.get_Channel()
   at EnrollmentServiceClient.UpdateEnrollmentProfile(String enrollmentId, String siteName, String deployServerName, Int32 methodId, String deviceClass, String deviceName, String registrationCode)

问题1: 我是否正确理解,对于“IEnrollmentService(WebHttpBinding_IEnrollmentService)”方法调用我需要另外指定一些端点?

问题2: 我可以完全适用吗?

问题3: 我应该关心它们吗(因为我可以从我的'自定义'应用程序中调用方法)?

3 个答案:

答案 0 :(得分:2)

WCFTestClient不支持REST服务(WebHttpBinding)。

答案 1 :(得分:2)

您应该能够使用常规浏览器使用webHttpBinding(REST)调用服务上的方法 - 不需要WcfTestClient ......这是REST的全部要点(和好处) - 它只是一个“XML” -over-HTTP“服务(大大简化)。

只需将浏览器指向服务端点

即可
http://YourServer/YourVirtualDirectory/YourService.svc

你应该能够看到你的服务生活在那里......

答案 2 :(得分:2)

谢谢大家,为了你的答案,他们给了我一些思考的食物。以下是我的问题的答案:

<强>正确答案为:

实际上,正如“marc_s”所述,问题是我的服务被配置为'REST'服务,因此回答为“是”以使WcfTestClient应用程序可以访问这些服务需要额外的端点(basicHttpBinding)。

<强> ANSWER2:

如“answer1”中所述:是的,为了使其可行,您需要添加basicHttpBinding端点。

<强> ANSWER3:

这取决于。如果您不打算使用WcfTestClient进行“测试” - 请不要在意。在我的特定情况下,我将实现单元测试来检查方法调用结果,因此WcfTestClient中的可用性并不重要。

谢谢你和每个有用答案的“+1”。

P.S。我接受自己答案的原因是与问题一致(对我来说是必不可少的)。