我已经创建了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: 我应该关心它们吗(因为我可以从我的'自定义'应用程序中调用方法)?
答案 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。我接受自己答案的原因是与问题一致(对我来说是必不可少的)。