2009-05-13 11 views
2

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&amp; 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.

Antwort

3

Sie müssen requireAccess="None" an den Handler in web.config hinzufügen, das heißt:

<add name="aspnet_isapi 32-bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv2.0,bitness32" /> 

Dies ermöglicht die Dateien korrekt

verarbeitet werden