September 2005 Blog Posts

Ottimizzare codice TSQL.

Per scrivere applicazioni performanti non è solo necessario scrivere del buon codice, ma è necessario prestare molta attenzione a come si lavora con le proprie banche dati. Per fare un count delle righe presenti in una tabella, il 90% dei programmatori utilizza: SELECT COUNT(*) from tabella Potrebbe sembrare corretto, ma non è proprio così.Quando si esegue questa query, il client invia al server una richiesta di piccolissime dimensioni. Il server riceve la richiesta ed effettua uno scan totale della tabella per determinare il totale delle righe in essa presenti. Per ogni riga viene effettuato un semplice calcolo basato su una addizione.. qualcosa di paragonabile ad un foreach. Questa...

posted @ Wednesday, September 28, 2005 10:27 AM | Feedback (201)

Asp.net Impersonation

Non appena Internet Information Services riceve una richiesta, questo controlla se esiste un filtro ISAPI in grado di elaborare il processo richiesto. Per esempio, per le richieste .asp viene chiamata in causa asp.dll. Se non esiste nessun filtro ISAPI abile ad elaborare la richiesta, IIS si fa carico di elaborare e rimandare le informazioni al client. Questo è il normale di processo di lavoro che viene effettuato per pagine .html, .gif, .jpg e semplici file di testo. Nel caso ci sia una richiesta per un file .aspx, questa viene passata al filtro aspnet_isapi.dll. Scopo di questo filtro è delegare l'ASP.NET Worker Process...

posted @ Monday, September 26, 2005 10:57 AM | Feedback (23)

SessionState non può essere utilizzato con SharePoint?

Session state non può essere utilizzato in ASP.NET con Windows SharePoint Services.Ecco la sorpresa del lunedì mattina.Fortunatamente una KB di support.microsoft.com fornisce un ottimo workaround al problema.Le modifiche vengono applicate al file web.config responsabile della nostra applicazione. Vengono disabilitati gli handler di WSS e ripristinati gli handler di asp.netIl livello di sicurezza delle pagine viene impostato a Full Trust.Viene attivato il modulo di sessione a livello di applicazione.E' necessario applicare tutti e tre queste tecniche per girare il problema, la sola modificadelle direttive page per il modulo di sessione non fornisce la soluzione ricercata. <!-- Clear out the WSS ASP.NET handler and specify the default ASP.NET handler for all pages. -->     <httpHandlers>         <clear />         <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory, System.Web, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />     </httpHandlers><!-- Set the trust to Full. WSS configures a very restrictive trust policy that does not allow ASP.NET Web application to run correctly. -->     <trust level="Full" originUrl="" /> <!-- Enable the session module. This can also be enabled on the WSS Web.config, but is not enabled by default. If you receive the following message: Parser Error Message: The module 'Session' is already in the application and cannot be added again. You can remove the following <httpModules></httpModules> section as session is already enabled on the virtual server. -->     <httpModules>         <add name="Session" type="System.Web.SessionState.SessionStateModule"/>     </httpModules> <!-- Enable session state for all the pages in the Web application. -->     <pages enableSessionState="true" enableViewState="true" enableViewStateMac="true" validateRequest="false" />   powered by IMHO 1.2

posted @ Monday, September 26, 2005 9:45 AM | Feedback (14)

[C#] Emettere Certificati Lato Client

Esistono due tipi di certificato. Lato Server e Lato Client. I certificati vengono considerati le carte d’identità di internet. Con un certificato un server può dimostrare all’utente la bontà del territorio in cui sta navigando. Lo stesso può essere fatto da un utente, il quale deve dimostrare di essere effettivamente la persona che il server si aspetta.   L’azienda presso la quale sto svolgendo il ruolo di consulente ha avuto la necessità di realizzare certificati lato client firmati dalla propria Certification Authority interna. Vorrei condivere questo argomento con voi, sperando che vi possa essere di aiuto in un vostro...

posted @ Friday, September 23, 2005 5:49 PM | Feedback (20)

Accorgimenti Programmazione AD

Vi posto alcuni suggerimenti che vi possono risparmiare alcune di lavoro perse nel trovare la soluzione ad un problema relativo alla programmazione Active Directory. 1. Quando aprite un oggetto DirectoryEntry assicuratevi sempre di fare il Dispose. (Alcune richieste possono restare in pending, risultato Connessioni e Query rifiutate). 2. Se ricevete un errore del tipo "The specified domain either does not exist or could not be contacted" oppure "Server is not Operational" e state effettuando una query LDAP su una path strutturata in questo modo LDAP://CN=" + username + ",OU=" + OU + ",OU=MiaOU,DC=miodc1,DC=miodc2"; ...

posted @ Friday, September 23, 2005 4:04 PM | Feedback (12)

ADSI IIS 04: Cambiare Il Nome ad un WebSite

Torniamo a parlare di ADSI.Tempo fa affrontai un progetto in cui si aveva la necessità di cambiare il nome ad un WebSite all'interno di IIS via codice. In entrata potevo avere 2 valori, Identificativo website e valore stringa da assegnare. Naturalmente la risposta è stata ADSI.Il metodo che segue effettua una connessione diretta al ID interessato e ne imposta la proprietà ServerComment.Al termine dell'operazione viene lanciato il CommitChange per rendere persistenti le modifiche.Nel caso in cui il cambio di valore fallisca, (questo può accadere spesso e volentieri) il metodo integra un sistema di retry.  Attende 2 secondi e riparte con l'esecuzione.             ...

posted @ Wednesday, September 21, 2005 11:08 AM | Feedback (17)

Riflessione

Microsoft affida in outsourcing progetti per 55milioni di dollari l'anno in cina.Benelli viene comprata dai cinesi... e cambia nome in Benerri. Devi comprare oggetti per il tuo palmare, vai su ebay e li paghi 1,00 $ dal cinese di turno. Compri un gioco di corse automobilistiche per la tua psp e ti trovi immerso nelle gare di drift cinesiCompri il gioco di calcio per la PlayStation 2 a tuo fratello e scopri che la software house che l'ha prodotto è cinese Esci il martedì vai a cena con gli amici.. e finisci ad un ristorante cinese Fai un giro a firenze per il centro e...

posted @ Wednesday, September 21, 2005 10:06 AM | Feedback (1297)

WMI 01 - Ricavare le informazioni del pc

Per recuperare le informazioni "Hardware" relative al computer (locale/remoto) si deve utilizzare Windows Management Interface (meglio conosciuto come WMI). E' possibile raggiungere WMI con Microsoft .NET Framework attraverso il namespace System.Management. L'applicazione che segue mostra a video una piccola serie d'informazioni relative a: Supporto Infrarossi (IRDA) Produttore del Computer Modello del Computer Il nome del PC Il numero di processori Il nome del proprietario. Lo scenario in cui, queste informazioni possono essere utili, sono molti.Si pensi, ad esempio, di creare una applicazione per la trasmissione dati attraverso IRDA. Oppure un pannello di controllo Web del proprio WebServer. WMI non fornisce unicamente informazioni...

posted @ Thursday, September 15, 2005 2:30 PM | Feedback (8)

ADSI IIS 03: Pilotare un WebSite da codice

Programmare IIS con ADSI non significa esplicitamente prelevare e cambiare valori di proprietà.Derivando dalla logica ad albero di Active Directory, la programmazione di IIS eredita il metodo Invoke, il quale ci permette di pilotare via codice un determinato WebSite. Ad esempio, il codice lancia i comandi Start WebSite - Il Sito Internet viene messo Online Stop WebSite - Il Sito Internet viene messo Offline              ///              /// Lancia comandi Internet Information Services per un determinato Dominio specificato              /// I comandi supportati sono [start-stop].              /// Utilizza ADSI.              ///              /// string              /// long              /// string              private void executeWebSiteCommand(string IpAddress,long ID,string...

posted @ Friday, September 2, 2005 3:04 PM | Feedback (16)

ADSI IIS 02: Cambiare la path ad un WebSite

ADSI (come noto) non si ferma alla sola gestione di ActiveDirectory; viene spesso utilizzato per gestire programmaticamente Internet Information Services. La funzione che segue cambia la homeDirectory di un sito a partire dal suo ID.              private void changeIISFolder(long IDWebsite,string folder)              {                     try                     {                            String folder = @"c:\mynewpath";                            DirectoryEntry iisWeb = null;                            iisWeb = new DirectoryEntry(@"IIS://" + "localhost" + @"/W3SVC/" + IDWebsite + @"/root");                                   iisWeb.Properties["Path"].Value = folder;                                    iisWeb.CommitChanges();                                   iisWeb.Close();                            iisWeb.Dispose();                     }                     catch (System.Exception ex)                     {                            // Gestire l’errore qui                     }              } Programmare IIS con ADSI non è esageratamente difficile,...

posted @ Friday, September 2, 2005 12:54 PM | Feedback (59)