有人可以告诉我为什么这个REST服务不起作用?
namespace WCFRestExample
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
public class HelloWorld : IHelloWorld
{
[WebGet(UriTemplate="/", ResponseFormat=WebMessageFormat.Xml)]
public string GetData()
{
return "HIIII";
}
}
}
namespace WCFRestExample
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IHelloWorld
{
[OperationContract]
string GetData();
}
}
这是我的web.config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
我能够浏览服务.svc并且我正确地获取页面但是当我浏览时:
http://localhost:60503/HelloWorld.svc/GetData
我得到一个404页面。任何人都可以告诉我发生了什么,我在哪里可以找到WCF REST的教程?这是可以创建的最简单的服务,即使这对我不起作用。
提前致谢:)
答案 0 :(得分:3)
您没有在任何地方定义这应该是REST服务 - 您的web.config中没有使用webHttpBinding
的端点,也没有在*.svc
文件中指定使用WebServiceHostFactory
。
最简单的解决方法是将svc文件修复为:
<%@ ServiceHost Language="C#" Debug="true"
Service="WCFRestExample.HelloWorld" CodeBehind="HelloWorld.svc.cs"
Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
有了这个,你的svc文件现在定义它想要使用WebServiceHost
(了解REST的主机)来托管你的服务......
使用WCF查看An Introduction To RESTful Services With WCF有关REST服务的详细介绍。
答案 1 :(得分:2)
尝试将您的URI模板更改为:
[WebGet(UriTemplate="/GetData", ResponseFormat=WebMessageFormat.Xml)]
<强>更新强>
uri模板中的位可以是任何内容,因此它可以是:
/GetMySuperComplicatedData
仍然映射到 GetData()
有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/bb675245.aspx
答案 2 :(得分:1)
尝试http://localhost:60503/HelloWorld
,并向我们展示您的Global.asax
答案 3 :(得分:1)
这可能是您未正确设置ServiceHostFactory的原因之一
<%@ ServiceHost Language="C#"
Service="WCFRestExample.HelloWorld"
CodeBehind="HelloWorld.svc.cs"
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
%>