Implementing IReportServerCredentials Interface

[ English version kindly provided by Google Language Tools.
ASAP, I’ll post my own translation. ]

Quando si sviluppano web applications, non puo’ mancare lo parte delle stampe.

Tutto procede bene per lo sviluppatore, sino a quando non si va ad installare l’applicativo dal cliente.
L’inconveniente piu’ comune e’ legato ai permessi (permessi di utente, di server, di rete, proxy, firewall, etc).
Tutto quello che sino al giorno prima (sviluppato e testato con cura) funzionava correttamente, puo’ generare errori a profusione.
Le nostre stampe, ahime’, non fanno eccezione.

E’ sempre bene prevedere questi inconvenienti e l’esperienza, ogni tanto, viene in nostro aiuto.

E quindi, come e cosa si puo’ anticipare ?
Semplice: bisogna impostare le credentials del nostro report viewer.
Embe’ ?

Il nostro oggetto ReportViewer ha la proprieta’ ServerReport, e questa ha a sua volta la proprieta’ ReportServerCredentials.
Questa proprieta’ e’ li per il nostro scopo.

Basta assegnare generare le credenziali giuste ed assegnarle a questa proprieta’.
La cosa sembra semplicissima, a portata di mano.
Purtroppo no.
Questa proprieta’ accetta solo oggetti che rispettino l’interfaccia IReportServerCredentials, ed il framework non ha oggetti belli e pronti per le nostre esigenze.
A dir la verita’, bisogna lavorarci un po sopra, comporre tutti i mattoncini ed integrare le NetworkCredentials (ICredentials) che molto spesso sono le uniche credentials che abbiamo.

La mia conoscenza del framework 2.0 e’ alquanto relativa, ed ecco che la rete mi e’ venuta in aiuto, fornendomi molti esempi di implementazioni di IReportServerCredentials, piu’ o meno complesse.

La piu’ semplice e’ questa IReportServerCredentials Interface direttamente da MSDN.

public sealed class MyReportServerCredentials :    IReportServerCredentials

{

public WindowsIdentity ImpersonationUser

{

get

{

// Use the default Windows user.  Credentials will be

// provided by the NetworkCredentials property.            return null;

}

}

public ICredentials NetworkCredentials

{

get

{

// Read the user information from the Web.config file.  

// By reading the information on demand instead of 

// storing it, the credentials will not be stored in 

// session, reducing the vulnerable surface area to the

// Web.config file, which can be secured with an ACL.

// User name

string userName =

ConfigurationManager.AppSettings

["MyReportViewerUser"];

if (string.IsNullOrEmpty(userName))

throw new Exception(

"Missing user name from web.config file");

// Password

string password =

ConfigurationManager.AppSettings

["MyReportViewerPassword"];

if (string.IsNullOrEmpty(password))

throw new Exception(

"Missing password from web.config file");

// Domain

string domain =

ConfigurationManager.AppSettings

["MyReportViewerDomain"];

if (string.IsNullOrEmpty(domain))

throw new Exception(

"Missing domain from web.config file");

return new NetworkCredential(userName, password, domain);

}

}

public bool GetFormsCredentials(out Cookie authCookie,

out string userName, out string password,

out string authority)

{

authCookie = null;

userName = null;

password = null;

authority = null;

// Not using form credentials

return false;

}

}

Ma come, cosi semplice ?
Ma non potevo scriverla io stesso ???

Non ve l’avevo detto che il framework 2.0 ed io non siamo ancora in confidenza ?
😀

Technorati tags: IReportServerCredentials, Reporting Services, Report

One Response to “Implementing IReportServerCredentials Interface”

  1. Don’t let sub report uglifies your report - RAQSOFT Konw How Says:

    […] Related Articles: Dynamic appearance can make a report seems clearer; 7 shortnesses of displayTag; Implementing IReportServerCredentials Interface; Crystal Reports and SQL Server CE; Useful Links: Excel-like Web-based Java Reporting Tool; […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: