Это для всех, кто хочет сделать выше. Мне было невероятно трудно найти информацию.
В методе GetHttpHandler(byVal requestContext as RequestContext) as IHttpHandler Implements 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 гласит, что третьим параметром должен быть RawURL, передача HttpContext.Current.Request.RawURL не работает, но вместо этого отлично работает передача виртуального пути в файл .asmx.
Я использую эту функцию, чтобы мой веб-сервис мог вызываться любым веб-сайтом, настроенным в любом случае (даже виртуальным каталогом), который указывает (в IIS) на то, что мое приложение может вызывать веб-сервис приложения, используя что-то вроде "http://url/virtualdirectory/anythingelse/WebService" и маршрутизация всегда будет направлять это в мой файл .asmx.