部署.NET REST服务 - 找不到页面 - 404错误

时间:2011-02-03 22:27:58

标签: .net web-services rest http-status-code-404

我有一个非常简单的REST服务(.NET 3.5),有点基于以下文章:

http://swindelles.com/2008/07/11/creating-rest-web-services-in-c-sharp/

  • 和 -

http://swindelles.com/2008/07/22/creating-rest-web-services-in-c-sharp-2/

当我从Visual Studio中运行它时它起作用 - 换句话说,通过Visual Studio的Web服务器将它托管在localhost上。但是,当我使用Visual Studio的“发布”来构建和打包文件以进行部署,然后将它们复制到我的远程付费Web主机的服务器时,当我尝试访问该服务时出现404错误。

我会在最后发布我的代码。

以下是适用于localhost的URL示例:

http://localhost:5077/MathHttpHandler/?num=5

(我知道通过使用?num=5查询字符串参数,我有点反对纯REST概念,但这是我稍后会处理的一个问题。我只是想试试这个首先要工作的东西。)

在我的远程Web主机服务器上,我将“已发布”文件复制到根目录(“/ dev”)正下方的子目录中。以下是我尝试使用的URL示例,但在执行此操作时只会出现404错误:

http://<my domain>.com/dev/MathHttpHandler
http://<my domain>.com/dev/MathHttpHandler/
http://<my domain>.com/dev/MathHttpHandler/5
http://<my domain>.com/dev/MathHttpHandler/num=5
http://<my domain>.com/dev/MathHttpHandler/?num=5

以下是相关文件:

MathHttpHandler.cs:

using System.Web;

namespace RestSpike02Library {
    public class MathHttpHandler : RestHandlerBase {
        public static string QS_NUM = "num";

        public override void ProcessRequest(HttpContext context) {
            //Call the base method to set up everything to default values first
            base.ProcessRequest(context);

            if (context.Request.HttpMethod == "GET") {
                int toSquare;
                if (int.TryParse(context.Request.QueryString[QS_NUM], out toSquare)) {
                    int squared = toSquare * toSquare;
                    context.Response.Write(squared.ToString());
                }
                else {
                    context.Response.Write("Invalid integer.");
                }
            }
        }
    }
}

的Web.config:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <customErrors mode="Off" />

        <!-- For IIS6 and earlier -->
        <httpHandlers>
            <add verb="*" path="MathHttpHandler/*" type="RestSpike02Library.MathHttpHandler, RestSpike02Library"/>
        </httpHandlers>
        <compilation debug="true"/>
    </system.web>

    <system.webServer>
        <!-- For II7+ -->
        <handlers>
            <add name="MathHttpHandler" verb="*" path="MathHttpHandler/*" type="RestSpike02Library.MathHttpHandler, RestSpike02Library"/>
        </handlers>
    </system.webServer>
</configuration>

任何人都可以看到我的文件有什么问题吗?我是否应该在服务器端做某些事情(比如某种配置)以使其工作?

应该注意的是,在尝试在远程服务器(.ASMX,WCF等)上运行任何类型的服务时,我遇到了类似的问题。

提前感谢您的建议。

2 个答案:

答案 0 :(得分:0)

当您说将文件复制到“子目录”时 - 是否将其配置为作为应用程序运行?

子目录中的Web.config文件无法注册HttpHandlers。这必须在根应用程序配置中发生。您可以通过嵌套<system.web>节点内的<system.webserver><location path="dev">节点来注册它们。

否则,您可以将子目录配置为作为应用程序运行,并包含web.config的其他必需部分。

答案 1 :(得分:0)