Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我无法使用浏览器(HTTP)调用wcf方法_Wcf_Http_Browser - Fatal编程技术网

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

我无法使用浏览器(HTTP)调用wcf方法,wcf,http,browser,Wcf,Http,Browser,我有一个以下代码的服务 TaskService.svc [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed] 公共类TodoService:ITodoService { 私有只读列表_数据源; 公共TodoService() { _数据源=新列表(); } [WebGet(UriTemplate=“/Todos”)] 公共列表待办事项() { 返回_数据源; }

我有一个以下代码的服务

TaskService.svc
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed]
公共类TodoService:ITodoService
{
私有只读列表_数据源;
公共TodoService()
{
_数据源=新列表();
}
[WebGet(UriTemplate=“/Todos”)]
公共列表待办事项()
{
返回_数据源;
}
}
数据传输对象如下所示

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

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

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

}
[服务合同]
公共接口ITodoService
{
[经营合同]
列出待办事项();
}
[数据合同]
公共课待办事项
{
[数据成员]
公共字符串名称{get;set;}
[数据成员]
公共bool已完成{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
我什么也没得到。但我希望有一个空数组。为什么会这样?

我认为WebGet()应该在您的接口(ServiceContract)中,而不是在该接口的实现中。另外,您的模板中是否需要在“TODO”之前加斜杠

[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();
}
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed]
公共类TodoService:ITodoService
{
私有只读列表_数据源;
公共TodoService()
{
_数据源=新列表();
}
公共列表待办事项()
{
返回_数据源;
}
}
[服务合同]
公共接口ITodoService
{
[WebGet(UriTemplate=“Todos”)]
[经营合同]
列出待办事项();
}
如果您在IIS中托管,您的TaskService.svc文件是什么样子的


编辑:哦,这是你的.svc文件。那没关系。

现在我遇到了一个错误,
使用“UriTemplate”的端点不能与“System.ServiceModel.Description.WebScriptEnableBehavior”一起使用。
是的,不能将WebScriptEnableBehavior与UriTemplates一起使用。对于REST服务,您希望使用System.ServiceModel.Activation.WebServiceHostFactory
[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();
}