我有一个非常简单的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等)上运行任何类型的服务时,我遇到了类似的问题。
提前感谢您的建议。
答案 0 :(得分:0)
当您说将文件复制到“子目录”时 - 是否将其配置为作为应用程序运行?
子目录中的Web.config文件无法注册HttpHandlers。这必须在根应用程序配置中发生。您可以通过嵌套<system.web>
节点内的<system.webserver>
和<location path="dev">
节点来注册它们。
否则,您可以将子目录配置为作为应用程序运行,并包含web.config的其他必需部分。
答案 1 :(得分:0)