【发布时间】:2012-05-23 13:16:53
【问题描述】:
我有一个 WCF REST 服务,很简单,像这样:
[ServiceContract]
public interface ITestService
{
[OperationContract]
[WebInvoke(
Method = "GET",
UriTemplate = "getNumber")]
int GetSomeNumber();
}
public class TestService : TestServiceApp.ITestService
{
public int GetSomeNumber()
{
return 5;
}
}
是这样配置的:
<services>
<service name="TestServiceApp.TestService">
<endpoint address="" binding="webHttpBinding" behaviorConfiguration="restBehaviour" contract="TestServiceApp.ITestService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="restBehaviour">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
使用指定的 Uri 模板从浏览器调用它可以正常工作:
http://localhost:52602/TestService.svc/getnumber.
我这样配置我的客户端:
<client>
<endpoint name="TstSvc" address="http://localhost:52602/TestService.svc" binding="webHttpBinding" contract="TstSvc.ITestService" behaviorConfiguration="restBehaviour"/>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="restBehaviour">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
当我使用以下代码调用服务时:
using (WebChannelFactory<ITestService> factory = new WebChannelFactory<ITestService>("TstSvc"))
{
var svc = factory.CreateChannel();
svc.GetSomeNumber();
}
我得到错误:
"没有端点监听
http://localhost:52602/TestService.svc/GetSomeNumber可以接受 消息。”
我怀疑由于某种原因,我使用 GetSomeNumber 方法的调用未正确映射到 uri /getnumber。为什么?我该如何解决这个问题,我错过了什么?
【问题讨论】: