У меня очень упрощенная служба 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.Однако, когда я использую «публикацию» Visual Studio для создания и упаковки файлов для развертывания, а затем копирую их на сервер моего удаленного платного веб-хоста, при попытке доступа к службе я получаю 404 ошибки.
Я опубликую свой код в конце.
Вот пример URL, который работает на localhost:
http://localhost:5077/MathHttpHandler/?num=5
(я знаю, что с помощью параметра строки запроса ?num=5
,Я как бы иду против чистых REST-концепций, но с этим вопросом я разберусь позже. Я просто пытаюсь заставить эту штуку работать сначала.)
На сервере моего удаленного веб-хоста,Я скопировал «опубликованные» файлы в подкаталог непосредственно под корнем («/ 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 и т. д.).
Заранее благодарим за ваши предложения.