【问题标题】:Get HttpHandler for asp.net web service为 asp.net 网络服务获取 HttpHandler
【发布时间】:2012-12-09 20:13:18
【问题描述】:

我正在使用 asp.net RouteTable 为 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 });

但这不是官方/记录的方式,并且可能会在未来的版本中改变,所以我的问题是,如果有 any 方法来获得正确的HttpHandler asp.net WebService 仅仅基于它的类型而不是它的虚拟路径?

【问题讨论】:

  • 您可能没有意识到这一点,但 ASMX Web 服务是一项遗留技术。将来不会有任何版本。为什么不使用已经支持路由的 WCF?
  • 谢谢 John,你的意思是我可以在 IIS 路由管道中定义 WCF 路由吗?或者我必须使用 WCF bindigs 定义路由?我一直在使用 WCF REST Web 服务,但我记得,它需要我创建自己的 ServiceHost/WebServiceHost 和绑定,而我宁愿依赖 IIS 绑定
  • 除了使用 WCF WebServiceHost(Silverlight 的服务)的标准路由外,我什么都没做过。我的观点很简单,WCF 的可扩展性和可配置性大约是 ASMX 的 100 倍,因此真的没有理由坚持使用已被 WCF 取代的旧技术。

标签: c# asp.net web-services asmx


【解决方案1】:

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

这是一个快速的 sn-p:

RouteTable.Routes.Add(new ServiceRoute("CustomServiceAddress", new ServiceHostFactory(), typeof(WCFService)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多