Stiamo in questi giorni migrando una applicazione di un nostro cliente ad una nuova infrastruttura HW (dopo 5 anni di sudato lavoro i due server HP: LP2000r e TC4100, andranno in pensione, al loro posto due nuovissimi DL360 G5 Xeon 5160). Con l’occasione abbiamo previsto la migrazione del relativo modulo di reporting che avevamo implementato con Sql 2000 reporting service alla versione 2005. Il modulo prevede l’utilizzo di RS con form autentication e la definizione di un’interfaccia custom di selezione dei report e dei relativi parametri di filtro.
L’impostazione di base della nuova versione è sicuramente migliore, nella versione precedente si doveva sempre lavorare molto con i vari parametri di querystring da passare al webservice che di default si trova sotto /reportserver/. I nuovi controlli che sono già disponibili in visualstudio2005, permettono di inserire un controllo sia in un’applicazione web che winform con una semplicità estrema; fino a qui… tutto bene.
C’è una cosa però che mi spiego: nella versione winform (Microsoft.ReportViewer.WinForms) del controllo esiste un bellissimo metodo per effettuare l’autenticazione del report in maniera trasparente per l’utente
ReportViewer1.ServerReport.ReportServerCredentials.SetFormsCredentials(null, "UserName", "Password", "DomainName");
La stesso metodo però, non è disponibile se si usa l’oggetto ServerReport del namespace Microsoft.ReportViewer.WebForms.
Per ovviare a questa mancanza e autenticare trasparentemente l’utente, esistono degli esempi (pazzeschi come logica) dove la pagina web che esegue il reportviewer, ricevuta una richiesta di report, si deve connette al webservice del reportserver, effettuare l’autenticazione e recuperare il cookie relativo all’autenticazione ricevuto dal webservice; deve infine impostarlo nella response della pagina, inoltrandolo quindi al client chiamante (il browser dell’utente) in modo che i succssivi accessi (che sono diretti) riutilizzino le stesse credenziali per ai dati. Ma io mi dico, non potevano metterci a disposizione lo stesso metodo SetFormsCredentials del winform??
Per chi fosse interessato, un articolo di esempio per questa tecnica date una lettura a questo post: http://blogs.msdn.com/bimusings/archive/2005/11/04/489100.aspx
Riporto inoltre qualche altro puntatore a tema interessante:
http://msdn2.microsoft.com/it-it/library/microsoft.reporting.webforms.ireportservercredentials(VS.80).aspx
http://www.gotreportviewer.com/
http://www.devx.com/dotnet/Article/30424