1

我正在使用 asp.netRouteTable为 WebService 注册自定义路由,但是 asp.net WebServices 不会从IHttpHandler接口继承,因此将调用传递给底层HttpHandler.

目前,唯一的官方/记录方法是使用WebServiceHandlerFactory为服务获取正确的处理程序:

IHttpHandler handler = new WebServiceHandlerFactory().GetHandler(HttpContext.Current, "*", "url", "path");

但是,这需要服务的虚拟路径,这不是我想要的!我发现的另一个解决方法实际上是WebServiceHandlerFactory使用反射并调用内部CoreGetHandler方法:

var wshf = new WebServiceHandlerFactory();
var coreGetHandler = wshf.GetType().GetMethod("CoreGetHandler", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var httpHandler = (IHttpHandler)coreGetHandler.Invoke(wshf, new object[] { typeof(MyWebService), context, context.Request, context.Response });

但这不是官方/记录在案的方式,并且可能会在未来的版本中发生变化,所以我的问题是,是否有任何方法可以HttpHandler仅根据其类型而不是其虚拟路径来获得 asp.net WebService 的权利?

4

1 回答 1

1

传统的 asmx WebServices 有一个替代方案,使用 WCF Web 服务更加容易和可扩展。我终于从这里找到了如何将 WCF 服务与 IIS 路由管道集成的解决方案

这是一个快速的片段:

RouteTable.Routes.Add(new ServiceRoute("CustomServiceAddress", new ServiceHostFactory(), typeof(WCFService)));
于 2012-12-17T19:17:04.577 回答