我正在使用 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 的权利?