2012-12-09 55 views
1

我使用的是asp.net RouteTable爲WebService註冊自定義路由,但是asp.net WebServices不會繼承IHttpHandler界面,因此它並不簡單也不乾淨以傳遞呼叫基本HttpHandler獲取HttpHandler的asp.net Web服務

眼下,唯一的官方/記錄的方法是使用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完全基於它的類型而不是它的虛擬路徑?

+3

你可能不知道這一點,但ASMX Web服務是一個過時的技術。將不會有任何未來版本。爲什麼不使用已經支持路由的WCF? –

+0

感謝John,你的意思是我可以在IIS路由管道中定義WCF路由權嗎?或者我必須使用WCF bindigs定義路線?我一直在使用WCF REST Web服務,但是我記得,它需要我創建自己的'ServiceHost' /'WebServiceHost'和綁定,而我寧願依靠IIS綁定 –

+1

我從來沒有做過任何事情但使用WCF WebServiceHost(Silverlight的服務)進行標準路由。我的觀點是,WCF的可擴展性和可配置性約爲ASMX的100倍,所以沒有理由堅持使用WCF取代的舊技術。 –

回答

1

對於傳統的asmx WebServices,使用WCF Web服務更加簡單和可擴展。我終於找到了解決辦法如何將WCF服務與IIS路由管道from here

集成下面是一個簡單的代碼片段:

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