Ich habe eine Web Forms App auf IIS7 Classic ausgeführt. Es verwendet .asmx Style Web Services für einen clientseitigen, schweren Teil der Site.Asp.net Routing, WebServices und IIS7 Classic
Wir haben mit Schichtung in „freundlicher Urls“ beauftragt und beschlossen, das neue Asp.net-Routing zu verwenden. Wir haben eine Regel in IIS alle Anfragen zum aspnet_isapi.dll abzubilden, die diese Erklärung in unserem web.config ergibt (system.webServer/hanlers):
<add name="asp.net routing" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
Aber jetzt Routing bricht unsere .asmx webservice Anfragen (des Formulars http://example.com/blah.asmx/SomeMethod). Jede Anforderung an einen Web-Service läßt uns mit dem immer Spaß:
Failed to Execute URL.
[HttpException (0x80004005): Failed to Execute URL.]
System.Web.Hosting.ISAPIWorkerRequestInProcForIIS6.BeginExecuteUrl(String url, String method, String childHeaders, Boolean sendHeaders, Boolean addUserIndo, IntPtr token, String name, String authType, Byte[] entity, AsyncCallback cb, Object state) +2004885
System.Web.HttpResponse.BeginExecuteUrlForEntireResponse(String pathOverride, NameValueCollection requestHeaders, AsyncCallback cb, Object state) +393
System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state) +223
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8677954
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
Setzen Sie diese Zeile in unseren Routen-Setup:
routes.Add(new Route("{service}.asmx/{*pathInfo}", new StopRoutingHandler()));
noch lassen uns mit der "Failed to URL ausführen" Ausnahme. Ich weiß, dass der Weg aus diesem Grunde ist passend:
public sealed class DieHandler : IRouteHandler
{
#region IRouteHandler Members
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
throw new NotImplementedException();
}
#endregion
}
routes.Add(new Route("{service}.asmx/{*pathInfo}", new DieHandler()));
Mit dieser Route an Ort und Stelle statt „Fehlern beim Ausführen URL“ Ich sehe „Methode nicht implementiert“, wie ich erwarten würde.
Mein Verdacht ist, dass unsere * -> aspnet_isapi.dll Verwüstung anrichtet, da ich niemanden gefunden habe, der dies tut, während ich google score.
Vielen Dank für alle Einsichten im Voraus.