Развертывание .NET REST Services - страница не найдена - 404 ошибки - PullRequest
1 голос
/ 04 февраля 2011

У меня очень упрощенная служба 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 и т. д.).

Заранее благодарим за ваши предложения.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2011

Спасибо всем за ваши предложения. Оказывается, что-то не так с тем, как мой хост настроил каталоги. Они решили проблему с их стороны, но они не смогли сказать мне, в чем заключалась проблема или как они ее решили. Итак, с одной стороны, я рад, что они это исправили, но с другой стороны, я не знаю, как избежать этой проблемы в будущем.

0 голосов
/ 04 февраля 2011

Когда вы говорите, что копируете файлы в «подкаталог» - он настроен для запуска в качестве приложения?

Файлы Web.config в подкаталогах не могут регистрировать HttpHandlers.Это должно произойти в конфигурации корневого приложения.Вы можете зарегистрировать их там, вложив узлы <system.web> и <system.webserver> внутри узла <location path="dev">.

В противном случае вы можете настроить подкаталог для работы в качестве приложения и включить другие необходимые части сети.config.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...