尝试在ASP.NET上运行REST服务

时间:2012-03-16 00:05:56

标签: asp.net rest

我在ASP.NET下创建了一个REST服务器,但我无法找出启动服务的URL。我使用内置的Web服务器在VS 2010下运行。我相信它实际上正在运行(VS 2010启动正常)。但是我能想到的每个组合都没有提起它。

更新:请查看文件http://www.windward.net/temp/RestUnderAspDotNet.zip - 我有两个解决方案。 src \ update中的那个可以作为REST服务器正常运行。我在inetpub \ wwwroot \ update上有相同的代码,当它运行时,我找不到与之对话的网址。我尝试了http://localhost:56469/update/App_Code/RestServiceImpl.svc/test我想到的每一个变体,得到403或404.

知道为什么吗? (我不想要任何安全保障 - 任何人都可以在它启动后点击它。)

App_Code文件\ IRestServiceImpl.cs:

[ServiceContract]
public interface IRestServiceImpl
{
    [OperationContract]
    [WebInvoke(UriTemplate = "/version", Method = "POST")]
    XmlElement GetVersion(XmlElement stats);

    [OperationContract]
    [WebInvoke(UriTemplate = "/test", Method = "GET")]
    string GetTest();
}

App_Code文件\ RestServiceImpl.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="RestServiceImpl" CodeBehind="RestServiceImpl.svc.cs" %>

App_Code文件\ RestServiceImpl.cs:

using System.ServiceModel;
using System.ServiceModel.Activation;
using System.Xml;

[AspNetCompatibilityRequirements
    (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class RestServiceImpl : IRestServiceImpl
{
    public XmlElement GetVersion(XmlElement stats)
    {
        XmlDocument doc = new XmlDocument();
        XmlElement root = doc.CreateElement("update");
        root.SetAttribute("version", "11.0.13.0");
        doc.AppendChild(root);
        return doc.DocumentElement;
    }

    public string GetTest()
    {
        return "update server is running";
    }
}

web.config的相关部分:

<system.web>
    <compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
    <services>
        <service name="RestServiceImpl">
            <!-- Service Endpoints -->
            <!-- Unless fully qualified, address is relative to base address supplied above -->
            <endpoint address ="" binding="webHttpBinding" contract="IRestServiceImpl" behaviorConfiguration="webBinding">
            </endpoint>
        </service>
    </services>

    <behaviors>
        <endpointBehaviors>
            <behavior name="RestServiceImpl">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <bindings>
        <webHttpBinding>
            <binding name="webBinding">
            </binding>
        </webHttpBinding>
    </bindings>
</system.serviceModel>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

知道提示/测试GET的URL是什么?

谢谢 - 戴夫

2 个答案:

答案 0 :(得分:1)

您可以尝试以下内容:

http://localhost:whateverportVSgivesyou/RestServiceImpl.svc/test

如果VS网络服务器正在运行,您应该看到它的系统托盘图标,如果您将鼠标悬停在它上面,您将看到它正在运行的端口...

答案 1 :(得分:0)

我终于弄明白了。我在Windward Wrocks的博客上也有截图。这是没有屏幕截图的解决方案:

  1. 安装WCF REST Service Template 40(CS)(需要.NET 4.0)。
  2. 创建WCF服务。这是一个新的“项目......”而不是“网站......”。它是在一般的“Visual C#”模板下,而不是“WCF”!