Asp. Сетевые 3.5 маршрутизации к веб-сервису?

Я искал способ направить http://www.example.com/WebService.asmx на http://www.example.com/service/ с помощью только ASP.NET 3.5 платформы Маршрутизации, не будучи должен настроить сервер IIS.

До сих пор я сделал то, что большинство учебных руководств сказало мне, добавил, что ссылка на блок маршрутизации, настроенный материал в web.config, добавила это к Global.asax:

protected void Application_Start(object sender, EventArgs e)
{
    RouteCollection routes = RouteTable.Routes;

    routes.Add(
        "WebService",
        new Route("service/{*Action}", new WebServiceRouteHandler())
    );
}

... созданный этот класс:

public class WebServiceRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        // What now?
    }
}

... и проблема тут же, я не знаю, что сделать. Учебные руководства и руководства я считал маршрутизацию использования для страниц, не веб-сервисы. Это даже возможно?

Ps: обработчик маршрутов работает, я могу посетить/service/, и он бросает NotImplementedException, который я покинул в методе GetHttpHandler.

7
задан Diogo Gomes 12 April 2010 в 09:40
поделиться

2 ответа

Вам нужно вернуть объект, реализующий IHttpHandler, который позаботится о вашем запросе.

Вы можете посмотреть эту статью о том, как реализовать веб-сервис, используя этот интерфейс: http://mikehadlow.blogspot.com/2007/03/writing-raw-web-service-using.html

Но это, вероятно, ближе к тому, что вам нужно http://forums.asp.net/p/1013552/1357951.aspx (Есть ссылка, но она требует регистрации, поэтому я не проверял)

1
ответ дан 6 December 2019 в 23:03
поделиться

Это для всех, кто хочет сделать то же самое. Мне было невероятно сложно найти информацию.

В GetHttpHandler (byVal requestContext как RequestContext) как IHttpHandler реализует метод IRouteHandler.GetHttpHandler (моя версия выше)

Кстати, это для Webforms 3.5 (моя в VB).

Вы не можете использовать обычный метод BuildManager.CreateInstanceFromVirtualPath () для вызова вашего веб-сервиса только для вещей, которые реализуют iHttpHandler, чего не делает .asmx. Вместо этого вам нужно:

Return New WebServiceHandlerFactory().GetHandler(
    HttpContext.Current, "*", "/VirtualPathTo/myWebService.asmx",       
    HttpContext.Current.Server.MapPath("/VirtualPathTo/MyWebService.aspx"))

В документации MSDN сказано, что 3-м параметром должен быть RawURL, передача HttpContext.Current.Request.RawURL не работает, но вместо этого передача виртуального пути к файлу .asmx отлично работает.

Я использую эту функцию, чтобы мой веб-сервис мог быть вызван любым настроенным веб-сайтом (даже виртуальным каталогом), который указывает (в IIS) на мое приложение, может вызывать веб-службу приложения, используя что-то вроде " http: // url / virtualdirectory / somethingelse / WebService ", и маршрутизация всегда будет направлять его в мой файл .asmx.

2
ответ дан 6 December 2019 в 23:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: