Asp.Net 3.5路由到Webservice?

我正在寻找一种方法将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?
    }
}

...问题就在那里, 我不知道该怎么做 。 我读过的教程和指南对页面使用路由,而不是web服务。 这甚至有可能吗?

Ps :路由处理器正在工作,我可以访问/ service /并引发我留在GetHttpHandler方法中的NotImplementedException。


只是以为我会根据标记为我工作的答案提供更详细的解决方案来解决这个问题。

首先,这里是路由处理器类,它将虚拟目录作为其构造器参数接受WebService。

public class WebServiceRouteHandler : IRouteHandler
{
    private string _VirtualPath;

    public WebServiceRouteHandler(string virtualPath)
    {
        _VirtualPath = virtualPath;
    }

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new WebServiceHandlerFactory().GetHandler(HttpContext.Current, 
            "*", 
            _VirtualPath, 
            HttpContext.Current.Server.MapPath(_VirtualPath));
    }
}

以及这个类在Global.asax的routey位内的实际使用情况

routes.Add("SOAP",
    new Route("soap", new WebServiceRouteHandler("~/Services/SoapQuery.asmx")));

这是给任何想要完成上述任务的人。 我发现很难找到这些信息。

GetHttpHandler(byVal requestContext as RequestContext) as IHttpHandler Implements IRouteHandler.GetHttpHandlerGetHttpHandler(byVal requestContext as RequestContext) as IHttpHandler Implements IRouteHandler.GetHttpHandler方法(我的上述版本)

这是Webforms 3.5的方式(我的VB)。

你不能使用通常的BuildManager.CreateInstanceFromVirtualPath()方法来调用你的web服务,它只适用于实现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文件反而效果很好。

我使用这种功能,以便我的web服务可以被任何配置的网站(甚至是虚拟目录)调用,这些网站指向(在IIS中)我的应用程序可以使用诸如“http:// url / virtualdirectory / anythingelse / WebService“,并且路由将始终将其路由到我的.asmx文件。


您需要返回实现IHttpHandler的对象,该对象负责处理您的请求。

你可以看看这篇关于如何使用该接口实现web服务的文章:http://mikehadlow.blogspot.com/2007/03/writing-raw-web-service-using.html

但这可能更接近你想要的http://forums.asp.net/p/1013552/1357951.aspx(有一个链接,但它需要注册,所以我没有测试)

链接地址: http://www.djcxy.com/p/56655.html

上一篇: Asp.Net 3.5 Routing to Webservice?

下一篇: How to implement custom JSON serialization from ASP.NET web service?