ciao
alex71 ha scritto:
Per prima cosa non ho capito se avendo un iis7 posso agire solo su di esso ( modalita pipeline integrata ) oppure devo andare anche a toccare il web.config
Usare la console di IIS7 o modificare il web.config è la stessa cosa, perché ogni settaggio fatto dalla console viene salvato sul web.config (e viceversa).
alex71 ha scritto:
Attualmente ho modificato il web config nel modo sotto ma non ho nessun vantaggio.
Quello che hai fatto è quasi giusto, manca un pezzetto.
Devi dire ad IIS di inoltrare al runtime di asp.net anche le richieste a file statici, che normalmente verrebbero gestiti dallo StaticFileHandler.
Questo lo fai impostando <modules runAllManagedModulesForAllRequests="true"
<location path="doc">
<system.web>
<authorization>
<deny users ="?" />
</authorization>
</system.web>
</location>
<system.web>
<authentication mode="Forms" >
<forms loginUrl="login.aspx" name=".ASPNETAUTH"></forms>
</authentication>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
Ora i tuoi file .pdf dovrebbero essere protetti, anche se questa soluzione non è proprio quella ideale.
Dato che che runAllManagedModulesForAllRequests è impostato su true, il runtime di asp.net verrà tirato in ballo per
ogni richiesta a file statico, comprese foto .jpg, stili .css e file javascript.
L'alternativa è quella di ricominciare da capo e scrivere un HttpHandler da legare all'estensione .pdf. In questo modo saranno solo le richieste a quel tipo di file ad essere elaborate dal runtime di asp.net.
<system.webServer>
<handlers>
<add name="HandlerPdf" type="TuoNamespace.TuoHttpHandler" path="doc/*.pdf" verb="*" />
</handlers>
</system.webServer>
Nel codice dell'handler avrai l'opportunità di controllare se l'utente è anomino o autenticato. Nel primo caso lo reindirizzerai alla pagina di Login, oppure gli mostrerai un errore HTTP 403 Forbidden.
Nel secondo caso, se era autenticato, andrai a leggere il file .pdf dal disco e lo invierai al client con il metodo
Response.TransmitFile.
Ti consiglio di scrivere un HttpHandler asincrono, perché la sua esecuzione può durare molto, trattandosi del download di un file.
http://www.aspitalia.com/script/897/Costruire-HttpHandler-Asincroni-ASP.NET-2.0.aspxUn HttpHandler asincrono va in esecuzione in un thread
fuori dal thread pool di Asp.Net e perciò non contribuirà al raggiungimento del numero massimo di thread consentiti.
Scrivere un handler asincrono è più semplice in asp.net 4.5 grazie alle nuove parole chiave
async e
await, ecco un articolo di Marco De Sanctis che ne parla.
http://www.aspitalia.com/script/1095/Utilizzo-Metodi-Asincroni-HttpHandler-ASP.NET-4.5.aspxciao
Modificato da BrightSoul il 14 dicembre 2012 22.29 -