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