我无法使用浏览器(HTTP)调用wcf方法

时间:2012-06-27 16:52:48

标签: wcf http browser

我有以下代码的服务

TaskService.svc

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TodoService : ITodoService
{
    private readonly List<Todo> _dataSource;

    public TodoService()
    {
        _dataSource = new List<Todo>();
    }

    [WebGet(UriTemplate = "/Todos")]
    public List<Todo> Todos()
    {
        return _dataSource;
    }
}

,数据传输对象如下

[ServiceContract]
public interface ITodoService
{
    [OperationContract]        
    List<Todo> Todos();
}

[DataContract]
public class Todo
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public bool Completed { get; set; }

}

web.config如下

<services>
  <service name="SampleService.TodosBehavior">
    <endpoint address="" behaviorConfiguration="SampleService.TodosBehavior"
      binding="webHttpBinding" contract="SampleService.TodoService" />
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="SampleService.TodosBehavior">
      <enableWebScript />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>

应用程序托管在IIS 7中,虚拟目录为SampleService。当我使用浏览器http://localhost/SampleService/TaskService.svc/Todos调用时,我什么也没有得到满足。但我期待一个空阵列。为什么会这样?

1 个答案:

答案 0 :(得分:1)

我认为WebGet()需要在您的界面(ServiceContract)中,而不是您的界面实现。另外,你在UriTemplate中的“Todos”之前需要斜杠吗?

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TodoService : ITodoService
{
    private readonly List<Todo> _dataSource;

    public TodoService()
    {
        _dataSource = new List<Todo>();
    }

    public List<Todo> Todos()
    {
        return _dataSource;
    }
}

[ServiceContract]
public interface ITodoService
{
    [WebGet(UriTemplate = "Todos")]
    [OperationContract]        
    List<Todo> Todos();
}

如果您在IIS中托管,您的TaskService.svc文件是什么样的?

编辑:哦,这是你的.svc文件。别介意。