Su .net, C#, ... RSS 2.0
 Thursday, August 06, 2009

Un buona documentazione (non ufficiale) sulla libreria per l'implementazione della Dependency Injection su tecnologia Microsoft "ObjectBuilder", utilizzata in svariati application blocks si può trovare qui:
http://www.sayedhashimi.com/CategoryView,category,ObjectBuilder.aspx
Enjoy,
Luc.

Thursday, August 06, 2009 5:44:10 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | C# | Dependency Injection
 Thursday, July 17, 2008
Mentre combattevo con application pool di IIS, account Local System et cetera Andrea mi mette a parte di una interessante serie di chiavi di registro, raccolte nel percorso:

           HKEY_LOCAL_MACHINE -> System -> CurrentControlSet -> Services -> EventLog

sono tutti gli event sources definiti sulla macchina. Si possono assegnare dei premessi alle chiavi in modo da non richiedere appartenenza al gruppo amministratori per la modifica dei log e, di conseguenza, evitare di assegnare, anche se solo per la generazione dell'eventSource, account Local System all'application pool.
Luc.

Thursday, July 17, 2008 10:51:04 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | ASP.net | C# | VB | web
 Monday, May 26, 2008

A questo indirizzo:

http://www.codeproject.com/KB/cs/LogParser_DataProvider.aspx

si può trovare un data provider custom per il logParser. Con esso si possono effettuare le query con un formato simile a quello delle normali query SQL, sfruttando le potenzialità di ADO.NET.

Luc.

Monday, May 26, 2008 4:05:52 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | C# | scripts | tools

L'infrastruttura WMI (Windows Management Instrumentation) permette, tra le altre cose, una volta definito lo schema di una classe, di instanziarne a runtime delle istanze. Tale operazione può essere effettuata tramite script wsh oppure sfruttando le classi presenti nei namespace System.Management e System.Management.Instrumentation.

Anzitutto è necessario istanziare un oggetto della classe ManagementPath, che identifica la classe da considerare:

            ManagementPath pathObj = new ManagementPath();
            
            pathObj.ClassName = "Win32_IP4RouteTable";
            pathObj.NamespacePath = "root\\CimV2";

In questo caso si tratta di una route ip.

Deve essere poi creata l'istanza di classe:

            ManagementScope mgmtScope = new ManagementScope(pathObj);
            ManagementClass routeTableClass = new ManagementClass(mgmtScope, pathObj, null);

            ManagementObject routeTableObj = routeTableClass.CreateInstance();

Sulla quale viene effettuata l'impostazione delle proprietà:

            routeTableObj.SetPropertyValue("<prop_name>", <prop_value>);
            ...

Ed infine l'istanza viene salvata:

            PutOptions po = new PutOptions();
            po.Type = PutType.UpdateOrCreate;

            routeTableObj.Put(po); 

Luc.

Monday, May 26, 2008 2:49:42 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | C# | networks | scripts
 Thursday, May 22, 2008

A volte può essere utile cambiare l'account con cui si esegue una porzione di codice, p.es. per ottenere dei livelli di trust più elevati. Si possono:

  • Utilizzare credenziali di rete differenti;
  • Acquisire le credenziali di account differenti.

Il primo caso è più comune in applicazioni che fanno uso di servizi sulla rete (accedono a pagine web o servizi web) ma che eseguono la maggior parte delle operazioni in locale. In tal caso una impersonation completa potrebbe essere inopportuna (l'utente di rete potrebbe non possedere permessi importanti in locale, come p.es. l'accesso al filesystem per salvare dei file). Si instanzia in questo caso la classe NetworkCredentials, che viene utilizzata per la connessione.

Il secondo caso si verifica quando un'applicazione ha necessità di acquisire dei permessi specifici per breve tempo, come p.es. scrivere o leggere su una share di rete da un'applicazione web che giri in un contesto utente non modificabile (p.es. un utenza NetworkService di un'application pool, per ragioni di sicurezza). In tal caso è possibile acquisire per breve tempo un contesto utente differente, eseguire delle operazioni ed infine tornare al contesto di partenza utilizzando le API di sistema.

Prima debbono essere dichiarati i metodi:


    [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
    public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, uint dwLogonType, uint dwLogonProvider, ref IntPtr phToken);
    [DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
    public static extern bool CloseHandle(IntPtr handle); 
    
Che verranno utilizzati per effettuare il logon e l'impersonation:

    int hresult = LogonUser(username, domain, password, (uint)LogonSessionType.Interactive, (uint)LogonProvider.LogonDefault, userToken);       
        
    WindowsIdentity identity = new WindowsIdentity(userToken); 
    WindowImpersonationContext context = identity.Impersonate;

Che può essere poi rilasciato:

     context.Undo();

Luc.

Impersonator.zip (,83 KB)
Thursday, May 22, 2008 5:15:40 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | C#
 Sunday, May 18, 2008

Alcuni interessanti articoli trovati su un blog. Il primo spiega come creare uno snap-in custom per mmc 3.0 con .net:

A managed code 'task manager' MMC 3.0 snap-in

un altro, sullo stesso argomento ma in stile 'cook-book':

The managed MMC 3.0 snap-in cookbook

ed infine un articolo su come creare un comando custom per la powershell:

Easy Windows PowerShell cmdlet development and debugging

il blog contiene parecchie informazioni. Da vedere.

Luc.

Sunday, May 18, 2008 10:53:03 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | C# | scripts
 Friday, May 16, 2008

Programma molto utile per la scrittura di query WMI (Windows Management Instrumentation). Si può scaricare da:

WMI Code Creator

Una volta selezionata una classe di interesse, è possibile generare codice per invocarne i metodi, le proprietà o gestirne gli eventi.

Molto utile per lo sviluppo o per la creazione di script di amministrazione, eventualmente in accoppiata con:

Scriptomatic 2.0

e con gli strumenti nella suite:

WMI Administrative Tools

tra cui CIM Studio e WMI Object Browser.

Preinstallati nel sistema si trovano inoltre, normalmente, i tools WBemTest.exe, per effettuare delle interrogazioni di prova e Wmic.exe, per eseguire delle query da riga di comando.

Luc.

Friday, May 16, 2008 7:03:57 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | C# | scripts | tools | VB

Ecco il sito da cui si può scaricare la versione definitiva:

EntLib 4.0

che include il supporto per Visual Studio 2008, l'integrazione con lo Unity application Block, il supporto per WMI2, et cetera.

Luc.

Friday, May 16, 2008 6:38:46 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | ASP.net | C# | VB
 Wednesday, May 14, 2008
Come rendere ordinabile una collezione di oggetti in una Datagrid, estendendo la collezione ed implementando le interfacce IBindingList (per l'interazione con la griglia) e IComparer (per l'ordinamento).
Wednesday, May 14, 2008 8:58:10 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | C#
 Monday, May 12, 2008

Applicazione web per convertire il codice VB in codice C#:

http://labs.developerfusion.co.uk/convert/vb-to-csharp.aspx

per chi non fosse ancora convinto, fa anche la conversione da C# a VB.

 ;)

Luc.

Monday, May 12, 2008 10:37:17 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | C# | VB

Libreria C# per effettuare queries su LogParser.

Come si usa:

              IComplexQueryGateway gateway = LogParserGatewayFactory.CreateGateway(LogType.IISLog);

            // seleziono il o i files su cui effettuare la query
            SelectQuery query = new SelectQuery("<percorso>\ex*.log");
            // imposto colonne, condizioni di where, groupby, orderby
            query.AddFields("cs-uri-stem as Url; sc-status as Status; COUNT(*) as Errors");
            query.AddWheres("sc-status >= 400; date >= TIMESTAMP ( '2008-04-01', 'yyyy-MM-dd' )");
            query.AddGroupBys("Url; Status");
            query.AddOrderBys("Errors DESC");
            // ritorno il dataset risultante
            return gateway.Data(query); 

Le queries possono essere anche testuali, utilizzando l'interfaccia ISimpleQueryGateway. La libreria si può utilizzare anche per effettuare queries sull'eventLog.

Luc.

IISLogWrapper.zip (8,31 KB)
Monday, May 12, 2008 10:28:10 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] -
.net | C#
Archive
<September 2010>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2010
Luca Biader Ceipidor
Sign In
Statistics
Total Posts: 47
This Year: 0
This Month: 0
This Week: 0
Comments: 4
Themes
Pick a theme:
All Content © 2010, Luca Biader Ceipidor
DasBlog theme 'Business' created by Christoph De Baene (delarou)