最简单的REST服务无法正常工作

时间:2011-07-25 11:12:42

标签: c# wcf rest .net-4.0

有人可以告诉我为什么这个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的教程?这是可以创建的最简单的服务,即使这对我不起作用。

提前致谢:)

4 个答案:

答案 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"
%>