Вы находитесь на странице: 1из 60

���������������������������������������

����������������������������������

�������������������������������������������������������������������������������������������������������������������������������������
�������������������������������������������������������������
������������������������������������������������������������
�����������������������������
���������������������������������������������������
IN VETRINA

Doing Objects Object-Oriented Programming Access Data


in Visual Basic 2005 Languages: Interpretation Analysis Cookbook
di D. Kurata di Craig - I. D. di K.Bluttman - W.S. Freeze
Addison Wesley Springer O’ Reilly
552 pp - 46,95 Euro 256 pp - 36,70 Euro 366 pp - 47,20 Euro
ISBN 9780321320490 ISBN 9781846287732 ISBN 9780596101220

Learning Ruby MAKE: Technology on Your Core Internet Application


di M. Fitzgerald Time Volume 10 Development with
O’ Reilly di M. Frauenfelder ASP.NET 2.0
255 pp - 34,50 Euro O’ Reilly di R. Connolly
ISBN 9780596529864 190 pp - 20,20 Euro Adison Wesley
ISBN 9780596513863 1088 pp - 48,95 Euro
ISBN 9780321419507

Rich Client Programming. Concepts of Programming Semantics with Applications:


Plugging into the NetBeans Languages 8th Ed. An Appetizer
Platform di R. Sebesta di H. Riis Nielson e F. Nielson
di Tim Boudreau et al. Addison Wesley Springer
Prentice Hall 752 pp - 46,95 Euro 278 pp - 31,40 Euro
640 pp - 47,20 Euro ISBN 9780321509680 ISBN 9781846286919
ISBN 9780132354806
VBJ 75

Visual Basic® 2005 Professional ASP.NET 2.0 Learning WCF


La Guida Completa AJAX A Hands-on Guide
di R. Petrusha di M. Gibbs - D. Wahlin di M. Leroux Bustamante
Mc Graw Hill Wrox//Wiley O’ Reilly
930 pp - 60.00 Euro 336 pp - 42,80 Euro 607 pp - 45.50 Euro
ISBN 9788838644696 ISBN 9780470109625 ISBN 9780596101626

Scrivi a book@infomedia.it specificando nell’oggetto della e-mail:


IN VETRINA VBJ n. 75
oppure inviaci il coupon al numero di fax 0587/732232
Potrai acquistare i libri qui riportati con uno SCONTO ECCEZIONALE
del 10% anche se acquisti solo un libro
oppure del 20% se acquisti 3 libri

VBJ 75
Ordina la tua copia
direttamente dal web
www.infomedia.it
���� ��������
����
���������������������������������
�� �������������������������������������������������������������������������
�����������
������������������

��������
�������������������������������������
�� ��������������������������������������������������
��������������

����������
�����������������������
�� ������������������������������������������������
����������������

�������������������
�� ����������������������������������������������������������������
���������������������

�����������
����������������������������������������
�� ��������������������������������������������������������������������������������������
�����������������������������������������������������������������������
��������������

����
����������������������������������������������������
�� ��������������������������������������������������
������������������

��������������� ��������
������������������������������������������������������������������������������������ �� ����������
��������������������������������������������������������������������������������������
������������������������������������������������������������������������������������������� �� ���������������
�������������������������������������������������������������������

������������������������������� �
���� ������� ������
��������������
�������������������
��������������������������
�����������������������������

��������������������������
��������������������������������������
��������������������
�����������������������������������������


��������������������������������������������������������
����������������������������������������������������������� ����������������
������������������������������������������������������ �������������������������������
������������������������������������������������������������������� �������������
������������������������������������������������������������������������ �������������������
������������������������������������������������������������������� ����������������
�������������������������������������������������������������������� ������������
��������������������������������������������������������������������� ��������������
���������������
��������������������������������������������������������������������� ������������
�������������������������������������������������������������������� �
�������� ������ ������������ ��� ������������ ��� ����� �������� ��������
���������������������������������������������������������������������������������������������
�����������������������������������������������������������������������������������������
��������������������������������������������
���������������������������������������������������������������������������������������
�������������������������������������������������������������������������������������������
�������� ����������
������������������������������������������������������������������������������������������ ��������������������������������
������������������������������������������������������������������������������������������ �������������������������
������������������������������������������������������������������������������������������� �����������������������
����������������������������������������������������������������������������������������� �����������������������
������������������������������������������������������������������������������������� ���������������
����������������������������������������������������������������������������������� �����������
���������������������������������������������������������������������������������������� ������������������������������
������������������������������������������������������������������������������������ �������
�������������������������������������������������������������������������������������� �����������������������������������
��������������������������������������������������������������������������������������� ��������������
����������������������������������������������������������������������������������������� ������������������������������
����������� �����������
�������������������������������������������������������������������������������������� �������������
�������������������������������������������������������������������������������������� �������������������
���������������������������������������������������������������������������������������
�������������������������������������������������������������
������������������������������������������������������������������������������������� ������
�����������������������
������������������������������������������������������������������������������������ ����������������������
��������������������������������������������������������������������������������������������
����������������������������������������������
�������������������
������������������������������������������������������������������������������������������� ����������������������������������
��������������������������������������������������������������������������������������� ���������������������������������
���������������������������������������������������������������������������������������������� ����������������
�������������������������������������������������������������������������������������������� �������������������������������
������������������������������������������������������������������������������������������� ������������������������������������������������
���������������������������������������������������������������������������������������� ����������������������������������
��������������������������������� ��������������������
�������������������������
����������������������������������������������������������������������������������������������
�������������������������������������������������������������������������������������������
����������������������������������������������������������������������
���������������������������������������������������������
����������������������������������������������������
������������������������������������

���������������� ����������������������������������������������������������������
�������������������������� ���������������������������������������������������������
�������������������������������������
�������������������������������������������������������������������������
�����������������������������������������������������
�� ������������������������������
.NET

WCF – Infrastruttura
di Sicurezza
Valutiamo l’infrastruttura di sicurezza offerta da
Windows Communication Foundation

di Paolo Pialorsi (www.devleap.com)

Windows Communication Foundation (WCF), come o non possa avere un certo ser-
abbiamo già visto in un precedente articolo [1], è vizio o svolgere una determina-
una infrastruttura di comunicazione pensata per lo ta attività. Di norma l’autorizza-
sviluppo di soluzioni Service Oriented (SOA) con zione avviene in virtù di regole
il Microsoft .NET Framework 3.0. e politiche associate all’identità
In questo articolo concentreremo la nostra atten- stessa o a ruoli/gruppi ai quali
zione sulle funzionalità e caratteristiche offerte da l’identità appartiene.
WCF e orientate alla sicurezza. Oltre a questo molti sistemi di
Dapprima è importante ricordare che quando si comunicazione hanno requisiti
parla di sicurezza entrano in gioco almeno due dif- di integrità e/o riservatezza della
ferenti ambiti, che sono spesso tra loro complemen- comunicazione. Per integrità si
tari: autenticazione e autorizzazione. intende la garanzia del fatto che
Autenticare qualcuno significa verificarne le cre- i messaggi scambiati non venga-
denziali, in qualunque forma siano espresse, per no manomessi da terzi durante
poi associare a quelle credenziali un’identità. Di per il loro trasferimento sulla rete.
sé autenticare un’identità, cioè “riconoscerla”, non Quando si parla di riservatez-
significa necessariamente autorizzarla ad ottenere za invece ci si riferisce al fatto
il servizio richiesto. Autorizzare qualcuno infatti è che solo il reale destinatario di
un’attività successiva all’autenticazione e prevede un messaggio deve poterne ve-
la verifica del fatto che una specifica identità possa dere il contenuto. Questi due
requisiti non sono necessaria-
mente congiunti, ad esempio
potrei trasmettere dei messag-
Paolo Pialorsi è un consulente e autore specializzato nello gi che descrivono delle quota-
sviluppo di servizi SOA e soluzioni in architettura distribuita
con il Framework .NET di Microsoft. Lavora nell’omonima zioni di borsa, con la sola preoc-
società Pialorsi Sistemi S.r.l. e fa parte del gruppo DevLeap. cupazione che non vengano ma-
Può essere contattato via email: paolo@devleap.it. Paolo nomessi, ma senza preoccupar-
mantiene un blog all’indirizzo: http://blogs.devleap.com/
mi che altri possano vederli, vi-
paolo/ .
sto che le quotazioni sono pub-

12 VBJ N. 75 - Maggio/Giugno 2007


.NET

bliche. D’altro canto se devo trasmettere dei Claim per ciascuna proprietà caratterizzante
numeri di carta di credito, avrò sicuramente della particolare identità Windows (UserNa-
l’esigenza che non vengano letti da “occhi non me, SID, ogni gruppo Windows).
autorizzati”, eventualmente operando anche
verifiche di integrità.
Spesso infine si parla di non ripudiabilità di
un messaggio o di una transazione. Con que- Per integrità si intende la
sto concetto ci si riferisce al fatto che un mes- garanzia del fatto che i
saggio non può essere misconosciuto dal suo
mittente. Per ottenere questo tipo di risultato messaggi scambiati non
sono necessari: autenticazione, cioè devo po- vengano manomessi
ter riconoscere il mittente del messaggio; in-
tegrità, cioè devo avere garanzia del fatto che
da terzi durante il loro
nessuno ha manomesso il messaggio durante trasferimento sulla rete
il transito sulla rete. La riservatezza non ri-
guarda necessariamente le logiche di non ri-
pudiabilità dei messaggi.
WCF fornisce servizi di autenticazione, au-
torizzazione, nonché sistemi di integrità e ri- Vediamo un altro esempio: un certificato di-
servatezza della comunicazione, per realizzare gitale X.509. In questo caso l’identità dell’in-
all’occorrenza comunicazioni basate su mes- terlocutore, sia esso un utente o un servizio
saggi non ripudiabili. software, sarà descritta dal SubjectName, dal-
l’Issuer del certificato, dalla data di scadenza,
Autenticazione in WCF ecc. Anche in questo caso l’insieme dei Claim,
che corrispondono a queste singole informa-
In WCF possiamo infatti applicare politiche zioni, costituirà l’identità digitale che ci con-
di autenticazione dal punto di vista dei servizi sentirà di riconoscere il mittente o il destina-
nei confronti dei consumer che si presentano tario di un messaggio gestito da WCF.
loro, ma anche dal punto di vista dei consu- Sfruttando questi concetti potremmo, al-
mer, che possono valutare l’identità dei servi- meno teoricamente, realizzare qualsiasi si-
zi, prima di “fidarsi” delle risposte ottenute. stema di autenticazione per WCF. In effetti è
Il concetto chiave alla base della logica di au- proprio così, ma visto che vi sono dei mecca-
tenticazione di WCF è il “Claim” che rappre- nismi di autenticazione molto diffusi e con-
senta la “dichiarazione di qualcosa di vero” solidati, Microsoft stessa ce ne offre l’imple-
(liberamente tradotto da: “An assertion of the mentazione direttamente nell’infrastruttura
truth of something”). Un Claim descrive una di base di WCF.
particolare informazione caratterizzante di un Possiamo ad esempio autenticare utenti e/o
interlocutore da autenticare. Una identità di- servizi sfruttando:
gitale è un insieme di Claim.
Vediamo un esempio pratico: l’autenticazio- • Windows Authentication: consente di va-
ne Windows. Ogni volta che autentichiamo un lidare le credenziali Windows di un utente sia
utente Windows, le informazioni che ne carat- a livello di macchina locale, sia a livello di do-
terizzano l’identità digitale sono il suo User- minio. Per trasferire le credenziali possono es-
Name, il suo SID Windows (Security Identifier sere utilizzati diversi meccanismi, in funzio-
Windows) e i gruppi Windows ai quali appartie- ne del protocollo di trasporto utilizzato e delle
ne. Ecco che in WCF l’autenticazione Windows logiche di autenticazione scelte. Ad esempio
si traduce nella rappresentazione di queste in- si possono utilizzare Kerberos, NTLM, Basic
formazioni sotto forma di Claim. Avremo un o Digest authentication.

N. 75 - Maggio/Giugno 2007 VBJ 13


.NET

Infine è importante sottolineare che, nella


classica filosofia di lavoro di WCF, possiamo
WCF fornisce servizi scegliere le politiche di autenticazione agen-
di autenticazione, do a livello di configurazione (file .config) dei
consumer e dei service host, cioè delle appli-
autorizzazione, nonché cazioni che espongono i nostri servizi, senza
sistemi di integrità dover intervenire sul codice .NET.
e riservatezza della Consideriamo il seguente contratto WCF:

comunicazione C# - .NET 3.0


[ServiceContract(Namespace=”http://schemas.devleap.com/
Services/DateTime”)]
public interface IDateTimeService
{
• UserName and Password Authentica- [OperationContract()]
tion: prevede l’autenticazione degli utenti in DateTime GetDateTime(Int32 gmt);
base ad una coppia UserName e Password. Le }
credenziali ricevute possono essere verificate
nuovamente come credenziali Windows, ovve- Si tratta di un servizio a fini dimostrativi,
ro come credenziali applicative sfruttando la quindi prescindiamo da qualsiasi ragiona-
Membership API di ASP.NET 2.0 oppure un mento in ottica Service Oriented e dalla de-
sistema personalizzato di verifica. Quest’ulti- finizione del servizio stesso. In questo artico-
mo è quello spesso più utilizzato nelle situa- lo concentriamoci solo sull’infrastruttura di
zioni in cui gli utenti non sono configurati sicurezza al contorno.
in Active Directory ma in database applicati- Di seguito è illustrata una possibile imple-
vi personalizzati. mentazione del contratto:

C# - .NET 3.0
• X.509 Certificate Authentication: ottiene
le credenziali di un interlocutore sulla base di public class DateTimeService: IDateTimeService
un certificato digitale X.509, che può essere {
associato a credenziali Windows, piuttosto che public DateTime GetDateTime(Int32 gmt)
configurato in un database applicativo. {
return(DateTime.UtcNow.AddHours(gmt));
Ciascuna di queste forme di autenticazione }
si traduce in token di autenticazione di WS- }
Security [2], definiti quindi secondo regole e
standard di mercato che prescindono da Mi- Per pubblicarlo tramite un’applicazione
crosoft e da WCF, ossia interoperabili anche ASP.NET 2.0 possiamo creare un semplice
con altre piattaforme software (Java in pri- file SVC:
mis). Un aspetto interessante da considerare
è poi il fatto che questi sono solo alcuni dei SVC - ASP.NET 2.0
sistemi forniti da WCF e che comunque pos- <%@ServiceHost Language=”C#” Service=”DateTimeService”%>
siamo creare in qualsiasi momento delle no-
stre personalizzazioni degli stessi, piuttosto Il web.config dell’applicazione può essere
che definire ex-novo dei token personalizzati come il seguente:
per descrivere altre forme di autenticazione.
Come sempre quindi WCF brilla per estendi- <?xml version=”1.0”?>
bilità e capacità di adattamento. <configuration>

14 VBJ N. 75 - Maggio/Giugno 2007


.NET

<system.serviceModel> C# - .NET 3.0

<services> DateTimeServiceClient svc = newDateTimeServiceClient();


<service name=”DateTimeService”> DateTime result = svc.GetDateTime(1);
<endpoint contract=”IDateTimeService” Console.WriteLine(result);
binding=”wsHttpBinding”/>
</service> Per modificare la configurazione in termini
</services> di autenticazione, ad esempio per sfruttare un
</system.serviceModel> token UserNamePassword, possiamo modifi-
<system.web> care il web.config del service host, personaliz-
<compilation debug=”true”/> zando la configurazione del binding:
</system.web>
</configuration> <?xml version=”1.0”?>
<configuration>
<system.serviceModel>
<services>
<service name=”DateTimeService”>

Come sempre quindi <endpoint contract= ”IDateTimeService”


binding=”wsHttpBinding”
WCF brilla per bindingConfiguration=

estendibilità e capacità ”dateTimeBinding”/>


</service>
di adattamento </services>
<bindings>
<wsHttpBinding>
<binding name=”dateTimeBinding”>
<security mode=”Message”>
<message clientCredential-
Il servizio è esposto utilizzando il binding Type=”UserName” />
wsHttpBinding. Si tratta di un binding che </security>
nativamente supporta la sicurezza tramite </binding>
WS-Security e che in modalità predefinita </wsHttpBinding>
utilizza un token di autenticazione Windows </bindings>
nel messaggio. </system.serviceModel>
Possiamo creare un consumer .NET 3.0 di <system.web>
questo servizio, utilizzando il tool a riga di <compilation debug=”true”/>
comando SVCUTIL.EXE oppure definendo </system.web>
una “Service Reference” da Visual Studio </configuration>
2005. Dal momento che WCF è in grado di
emettere nel WSDL dei servizi le policy che Semplicemente con questa modifica le cre-
descrivono le regole di sicurezza adottate, il denziali del client saranno fornite con un to-
consumer saprà quale tecnica di autentica- ken differente, che come comportamento pre-
zione utilizzare. definito sarà sempre e comunque valutato ri-
A livello di consumer non dovremo quindi spetto all’elenco di utenti di macchina o di
fare altro che invocare il servizio, sfruttando dominio.
il fatto che come comportamento predefinito Nel caso di token UserNamePassword dob-
il consumer, nel caso di sicurezza Windows biamo però considerare il fatto che le creden-
iniettata in WS-Security, invierà le credenzia- ziali (UserName e Password) viaggerebbero in
li dell’utente Windows corrente. chiaro, a meno di non utilizzare un trasporto

N. 75 - Maggio/Giugno 2007 VBJ 15


.NET

sicuro come ad esempio HTTPS, rinuncian-


do però ad una delle regole di SOA, cioè l’in-
dipendenza dal trasporto. D’altra parte invo- Di solito non è
cando il file SVC in un browser, dopo averlo architetturalmente
configurato come appena riportato, otterremo
un messaggio di errore come il seguente: “The
corretto investire sulle
service certificate is not provided. Specify a logiche autorizzative a
service certificate in ServiceCredentials”.
L’errore ci segnala che è necessario proteg-
livello di servizio
gere tramite encryption a chiavi asimmetri-
che il token, fortunamente WCF è premuro-
so e si preoccupa di avvisarci di un potenzia-
le rischio. aggiornerà solo il proprio app.config, ma non
Possiamo integrare il web.config aggiungen- modificherà minimamente il codice C# auto-
do un comportamento (behavior) personalizza- generato, per supportare questa nuova con-
to, che preveda appunto un certificato digitale figurazione.
X.509 che il service host potrà utilizzare per Ora il codice consumer relativo alla chiama-
farsi inviare in modo sicuro il token. ta al servizio dovrà però fornire le credenziali,
in forma di UserName e Password, in modo
<behaviors> esplicito. Infatti se dovessimo invocare il ser-
<serviceBehaviors> vizio senza fornire le credenziali, otterremmo
<behavior name=”dateTimeServiceBehavior”> il seguente messaggio di errore: “Unhandled
<serviceDebug includeExceptionDetail Exception: System.InvalidOperationExcept-
InFaults=”true” /> ion: The username is not provided. Specify
<serviceMetadata username in ClientCredentials”.
httpGetEnabled=”true” /> Di seguito è riportato il codice consumer ag-
<serviceCredentials> giornato, con l’indicazione delle credenziali
<serviceCertificate da utilizzare:
storeLocation=”LocalMachine”
storeName=”My” x509FindType=” C# - .NET 3.0
FindBySubjectName” findValue=” DateTimeServiceClient svc = new
WSE2QuickStartServer” /> DateTimeServiceClient();
</serviceCredentials> svc.ClientCredentials.UserName.UserName =
</behavior> “DEVLEAP\\UserName”;
</serviceBehaviors> svc.ClientCredentials.UserName.Password =“Password”;
</behaviors> DateTime result = svc.GetDateTime(1);
Console.WriteLine(result);
Nella sezione serviceCertificate si dichiara
che si vuole utilizzare un certificato il cui Su- Come si vede lo UserName può prevedere
bjectName è “WSE2QuickStartServer”, da ri- anche l’indicazione del dominio. Nel caso in
cercare nello store locale di macchina. cui poi dal lato del service host si utilizzino
Anche questa informazione sarà riportata certificati X.509 di test, quindi non validi in
nelle policy emesse nel file WSDL del servi- quanto non rilasciati da Certification Autho-
zio, quindi rigenerando il codice del consu- rity di fiducia, dobbiamo richiedere a WCF
mer, cioè rinfrescando la Service Reference, di non verificarli. Possiamo farlo impostan-
avremo il client in grado di contattare il ser- do opportunamente le proprietà Certificate-
vizio nella nuova modalità. ValidationMode e RevocationMode dell’ogget-
È interessante notare che anche il consumer to ServiceCertificate.Authentication di Clien-

16 VBJ N. 75 - Maggio/Giugno 2007


.NET

tCredentials. li di ASP.NET 2.0, in connubio con la Mem-


bership API, ovvero sfruttare delle Authori-
Potremmo proseguire per ore, valutando le zationPolicies personalizzate, in grado di la-
varie tipologie di token e tutte le possibili vorare direttamente a livello di Claim.
impostazioni configurabili in WCF, ma l’obiet- In generale la modalità più comoda di gestire
tivo di questi esempi era solo sottolineare la l’autorizzazione è impersonificare il chiaman-
semplicità con cui è possibile configurare la te, indicando nel servizio che siamo in grado
sicurezza di un servizio WCF, sia sul service di supportare questo tipo di comportamento
host che sul consumer. (OperationBehavior) e poi sfruttando il motore
di sicurezza di .NET, basando l’autorizzazio-
Autorizzazione in WCF ne sulle Identity ed i Principal sia Windows
che eventualmente personalizzati.
Come abbiamo già visto, autenticare è solo Ecco una versione modificata del nostro ser-
una parte del lavoro. Una volta ottenuta l’iden- vizio, in grado di supportare l’impersonifica-
tità di un interlocutore dobbiamo autorizzarlo. zione del chiamante:
Una prima considerazione che mi preme sot-
tolineare a questo proposito è il fatto che di C# - .NET 3.0
norma l’autorizzazione compete allo strato di public class DateTimeService: IDateTimeService
business di un’applicazione a N livelli. Lo stra- {
to di comunicazione dal suo canto dovrebbe [OperationBehavior(Impersonation=
limitarsi ad invocare un back-end strutturato, ImpersonationOption.Allowed)]
fornendo l’identità ottenuta. Di solito quindi public DateTime GetDateTime(Int32 gmt)
non è architetturalmente corretto investire pe- {
santemente sulle logiche autorizzative a livel- return(DateTime.UtcNow.AddHours(gmt));
lo di servizio ed è meglio limitarsi ad auten- }
ticare il chiamante, per poi demandare la re- }
sponsabilità autorizzativa allo strato di back-
end. Queste considerazioni nascono dal fatto Se volessimo autorizzare solo gli utenti del
che l’infrastruttura di comunicazione evolve gruppo Windows degli “Administrators” ad
nel tempo, una volta c’era ASMX, poi WSE, invocare l’operazione potremmo aggiungere
ora WCF. Implementare la logica di autorizza- anche l’attributo PrincipalPermissionAttribu-
zione a livello di servizio significherebbe do- te all’operazione.
verla reimplementare ad ogni cambiamento
dell’infrastruttura di comunicazione. Mante- C# - .NET 3.0
nere a livello di business layer tale logica ci public class DateTimeService: IDateTimeService
consente invece di riutilizzarla più volte. {
In tutti quei casi in cui comunque si voglia- [OperationBehavior(Impersonation=
no implementare anche a livello di servizio ImpersonationOption.Allowed)]
delle politiche di autorizzazione, WCF con- [PrincipalPermission(SecurityAction.Demand,
sente di sfruttare innanzitutto l’autorizzazio- Role=”Administrators”)]
ne a livello di Host, cioè con regole a livello public DateTime GetDateTime(Int32 gmt)
di firewall e/o di application server, nel caso {
di IIS. Qualora si utilizzi poi l’autenticazione return(DateTime.UtcNow.AddHours(gmt));
Windows, possiamo chiedere a WCF di im- }
personificare il chiamante e di autorizzarlo }
in base ai gruppi Windows.
Nel caso di token non Windows possiamo in- A questo punto chiunque dovesse invocare
vece scegliere di utilizzare il sistema di ruo- l’operazione, senza fornire le credenziali di

N. 75 - Maggio/Giugno 2007 VBJ 17


.NET

ne, possiamo poi personalizzare i nostri ser-


vizi agendo in questo caso a livello di contrat-
Il binding ti, sui singoli messaggi, per rendere obbliga-
wsHttpBinding sfrutta tori alcuni criteri minimi di protezione. Pos-
siamo anche agire a livello di configurazione,
in modo predefinito per scegliere se avere integrità e riservatezza
l’autenticazione tramite il protocollo di trasporto, oppure a li-
Windows e WS- vello di messaggio SOAP.
In particolare è interessante notare che nel
SecureConversation caso in cui si utilizzi il binding wsHttpBin-
ding, i nostri servizi non solo sfrutteranno in
modo predefinito l’autenticazione Windows e
l’autorizzazione basata sui ruoli di Windows,
un Administrator, riceverebbe un messaggio ma sarà anche attivo WS-SecureConversation
di errore di tipo “Access is denied”. [4], che ci consentirà di avere lo scambio delle
Ovviamente qualora utilizzassimo utenti credenziali tra service host e consumer solo
personalizzati e non Windows, al posto dei alla prima richiesta, per poi condividere un
gruppi Windows potremmo sostituire ruoli canale sicuro (firma digitale ed encryption,
persolizzati, codificati ad esempio su un da- by default) senza dover fornire le credenziali
tabase applicativo. ad ogni successiva richiesta.
Per maggiori dettagli sull’attributo Principal-
PermissionAttribute e in generale sulla sicu- Conclusioni
rezza di .NET, consiglio la lettura dell’ottimo
libro “.NET Security” [3]. WCF costituisce indubbiamente un’infra-
Dal momento che non è particolarmente co- struttura di comunicazione solida e sicura,
modo, in termini di mantenibilità, dover mo- pronta per realizzare in modo rapido ed effi-
dificare il codice del servizio per autorizzare cace soluzioni in architettura Service Orien-
utenti e gruppi/ruoli, è anche possibile defi- ted.
nire delle classi personalizzate di policy, che In questo articolo abbiamo potuto valutare
implementino l’interfaccia IAuthorizationPoli- alcuni degli aspetti chiave della sua struttu-
cy della class library di WCF, per gestire ruoli ra in termini di sicurezza. Abbiamo in parti-
e identità applicative da “risolvere” caso per colare visto come definire servizi sicuri, rea-
caso all’interno delle AuthorizationPolicy, va- lizzando nei fatti quello che la teoria di SOA
lutando i Claim ricevuti. raccomanda, cioè il poter riutilizzare i servizi
In conseguenza degli spazi disponibili per un su diversi protocolli e configurazioni, in modo
articolo come questo, non vedremo dettagli di trasparente per il nostro codice.
questa tecnica avanzata di autorizzazione.
Riferimenti
Integrità e riservatezza
[1] Paolo Pialorsi – “WinFx: Windows Com-
Anche sul fronte dell’integrità e riservatezza munication Foundation”, Visual Basic Jour-
della comunicazione WCF consente di applica- nal n° 69
re firma digitale (integrità) ed encryption (ri- [2] http://www.oasis-open.org/committees/wss/
servatezza) ai messaggi o a porzioni di essi. [3] http://www.apress.com/book/
Il comportamento predefinito di WCF pre- bookDisplay.html?bID=104
vede sia integrità che riservatezza delle co- [4] http://specs.xmlsoap.org/ws/2005/02/sc/
municazioni. WS-SecureConversation.pdf
Come per l’autenticazione a l’autorizzazio-

18 VBJ N. 75 - Maggio/Giugno 2007


TECNICHE

Regular Expression
Seconda Parte

In questa seconda parte ci concentreremo su una implementazione reale


delle Regular Expression, quella fornita dal motore di Scripting Versione
5.5 o superiore di Microsoft. Vedremo come sfruttare questa libreria COM
in linguaggi molto diffusi quali Visual Basic, Delphi e VBScript.

di Vito Vessia

La prima parte di questo corso sulle Regular Ex- La libreria in dettaglio


pression vi sarà sembrata un po’ troppo teorica e
astratta e peraltro priva di codice di programma- Questa implementazione è
zione. Il codice, infatti, dona sempre una sensazio- pressoché completa e fornisce
ne di consistenza a qualsiasi concetto di informati- un parser RegEx potente e ve-
ca teorica. L’obiettivo era di introdurre i rudimenti loce che potrà già soddisfare la
sulle espressioni regolari senza legarli a nessuna gran parte delle esigenze di ela-
implementazione, analogamente a quanto si fareb- borazione delle stringhe. Si tratta
be per il linguaggio di interrogazione SQL, che è di una libreria fornita come par-
alquanto neutro rispetto al database sottostante e te del framework di VBScript e
sicuramente lo è rispetto al framework di accesso come tale è già embedded nel
ai dati utilizzato. linguaggio, nel senso che negli
Per cui, pur ribadendo che RegEx è una tecnolo- script di questo linguaggio non
gia presente e sfruttabile ormai in numerosi lin- dovrete nemmeno istanziare il
guaggi di programmazione e su sistemi operativi motore con una CreateObject,
differenti, in questo articolo invece ci concentrere- ma potrete procedere con una
mo sulla libreria Microsoft VBScript Regular Ex- semplice New:
pression 5.5 fornita con Internet Explorer 5.5 o suc-
cessivi e liberamente scaricabile ed installabile su ‘VBScript
tutte le versioni di Windows anche non in bundle Set RegEx = New RegExp
con Internet Explorer, ma come parte dello Script
Engine 5.5. ‘VBA
Dim RegEx as RegExp
Vito Vessia progetta e sviluppa applicazioni e framework
Dim MatchColl As MatchCollection
occupandosi degli aspetti architetturali. Scrive da anni per le
principali riviste italiane di programmazione ed è autore del Dim Match As Match
libro “Programmare il cellulare”, Hoepli, 2002, sul protocollo
standard AT+ dei telefoni cellulari con. Può essere contattato Set RegEx = CreateObject(“VBScript
tramite e-mail all’indirizzo vvessia@katamail.com.
.RegExp”)

20 VBJ N. 75 - Maggio/Giugno 2007


TECNICHE

L’oggetto fondamentale è appunto VBScript_ oRegEx.Pattern = “ IDX(\d{3})-1:(\…”


RegExp_55.RegExp, il motore. Si supponga di
voler interpretare la stringa di esempio già A questo punto si imposteranno le proprie-
presentata nel primo articolo [1]: tà di scansione del motore:

IDX001-1:045826,1,”ALIM”,”DEPERIB”,”FRUTTA”, · IgnoreCase – indica che deve scansionare


”MELE TRENT.”,”KG”,2002-09-29 le occorrenze in modalità case-insensitive;
IDX001-2:45454354,34534534,3453456
IDX002-1:022342,,”ALIM”,”CONFEZ”,”LATTIC”, · MultiLine – deve interpretare gli indicatori
”SCAMOR.MASA” di inizio e fine stringa, cioè $ e ^, come ini-
IDX002-2:3243441 zio e fine di una linea, considerando quindi
IDX003-1:111134,,ALIM,CONFEZ,LATTIC,LATTE i CRLF come indicatori di fine linea;
ALICE,,2002-12-29
IDX003-2:232454354,13203456 · Global – deve estrarre tutte le occorrenze
(match) che rispondono al pattern e non fer-
A cui applicheremo il pattern già analizzato marsi alla prima.
nello stesso articolo:
oRegEx.IgnoreCase = True
IDX(\d{3})-1:(\d+),\d*,”?([\w|.|\s|- oRegEx.MultiLine = True
]+)”?,”?([\w|.|\s|-]+)”?,”?([\w|.|\s|- oRegEx.Global = True
]+)”?,”?([\w|.|\s|-]+)”?(?:,”?(\w*)”?(?:,(\
d{4})-(\d{2})-(\d{2})|)|)\r\nIDX\1-2:(\d*)(?: Quindi si potrà finalmente eseguire la
,(\d*)|)(?:,(\d*)|)(?:,(\d*)|)(?:,(\d*)|) scansione facendosi restituire come risul-
tato una collection di match, cioè una Ma-
Per il suo utilizzo si procede con l’assegna- tchCollection:
zione del pattern regex all’oggetto, in modo
da preparare il motore alla scansione delle ‘esecuzione del pattern su un testo passato
stringhe secondo tale pattern: come parametro
Set MatchColl = RegEx.Execute(“IDX001-1:
‘assegnazione del pattern 045826,1,”ALIM…”)

Si potrà così procedere con la lettura di


tutti i match restituiti dalla scansione,
magari con una semplice for each:

For Each Match In MatchColl


Debug.Print Match.Value & vbCrlf
Next

Il pattern impostato nell’esempio e ap-


plicato al testo visto in precedenza ci re-
stituisce tre match, uno per ciascuno dei
tre blocchi di record presenti nel testo e
cioè il blocco IDX001:

IDX001-1:045826,1,”ALIM”,”DEPERIB”,”FRUTTA,
Figura 1 La referenza da usare nei progetti Visual Basic
”MELE TRENT.”,”KG”,2002-09-29
IDX001-2:45454354,34534534,3453456

N. 75 - Maggio/Giugno 2007 VBJ 21


TECNICHE

Figura 2 I gruppi estratti per posizione

Seguito dal blocco IDX002: sta dall’oggetto Match. Si tratta della soli-
ta collection, ma questa volta gli item sono
IDX002-1:022342,,”ALIM”,”CONFEZ”,”LATTIC”, dei semplici Variant non tipizzati che con-
”SCAMOR.MASA” tengono direttamente il valore della sotto-
IDX002-2:3243441 occorrenza:

E così per il terzo o per tutti gli altri, se ce ne Debug.Print Match.SubMatches(1)


fossero stati. Ma il nostro pattern, come spie-
gato in [1], è in grado di estrarre anche i grup- Dove l’indice 1 rappresenta il numero pro-
pi, cioè dei sottocampi all’interno del match gressivo del submatch, assegnato dal moto-
che contengono proprio le informazioni ato- re in ordine di elaborazione dei gruppi, cioè
miche presenti nella stringa (nell’esempio si il primo gruppo trovato avrà indice 1, il se-
trattava di codice articolo, descrizione artico- condo 2, e così via…
lo, unità di misura, ecc...). I gruppi, come si ri-
corderà, venivano creati per ogni sotto-pattern For Each Group In Match.SubMatches
racchiuso tra parentesi tonde, ad esempio: Debug.Print Group
Next
IDX(\d{3})-1...
L’esempio Visual Basic 6
Per accedere a queste informazioni dal mo-
dello ad oggetti di VBScript RegExp 5.5, si do- Dal sito ftp://ftp.infomedia.it è possibile sca-
vrà utilizzare la proprietà SubMatches espo- ricare il codice Visual Basic 6 di esempio del

22 VBJ N. 75 - Maggio/Giugno 2007


TECNICHE

Listato 1

Dim RegEx As RegExp


Dim MatchColl As MatchCollection
Dim Match As Match
Dim Group As Variant
Dim i As Integer
Dim j As Integer

Set RegEx = New RegExp


RegEx.Pattern = txtPattern.Text
RegEx.IgnoreCase = True
RegEx.MultiLine = True
RegEx.Global = True
Set MatchColl = RegEx.Execute(txtText.Text)

txtResult.Text = „“
For Each Match In MatchColl
txtResult.Text = txtResult.Text & „Match: „ & Match.Value & vbCrLf & vbCrLf

For Each Group In Match.SubMatches


i = i + 1
txtResult.Text = txtResult.Text & „Group: „ & i & „ = „ & Group & vbCrLf
Next

txtResult.Text = txtResult.Text & vbCrLf & _


„========================================================“ & _
vbCrLf & vbCrLf & vbCrLf
Next

scenza del significato di ciascuna sotto-occor-


renza e per cui si può procedere con l’even-
L’implementazione tuale manipolazione di queste informazioni
specifiche, come mostrato nel semplice esem-
VBScript RegEx 5.5 è pio del Listato 2.
completa e potente Si può notare come si è proceduto alla ricerca
puntuale di specifiche sotto-occorrenze (Codi-
ce Articolo, Descrizione, Gruppo Merceologi-
co, ecc…) semplicemente conoscendo la loro
posizione e quindi l’ordine di estrazione dei
progetto VB6RegEx.vbp che mostra come uti- gruppi dal pattern. In Figura 3 è possibile os-
lizzare questi oggetti. Innanzitutto in Figura 1 servare il risultato a video dell’esecuzione del
è possibile osservare le librerie da referenzia- precedente codice.
re. La Figura 2 mostra invece il nostro picco-
lo client VB6 in azione: viene fornito in input La Replace
il nostro testo di esempio col record di ana-
grafica da importare (txtText), sottoponendolo Un’altra potente funzione offerta dai motori
alla ben nota RegEx (txtPattern) applicando RegEx e quindi anche da quello fornito nella
la funzione riportata nel Listato 1. libreria VBScript Regular Expressions 5.5, è
È altresì vero che, conoscendo la struttura la possibilità di effettuare la sostituzione di
della stringa e avendo già definito l’espressio- occorrenze di sottostringhe con sequenze di
ne regolare che la interpreta, si è già a cono- caratteri prestabilite, che possono anche es-

N. 75 - Maggio/Giugno 2007 VBJ 23


TECNICHE

Listato 2

Dim Match As Match


Dim Group As Variant
Dim j As Integer

txtResult.Text = “”
For Each Match In MatchColl
txtResult.Text = txtResult.Text & “Analisi del record: “ & Match.Value &
vbCrLf & vbCrLf

txtResult.Text = txtResult.Text & “Codice articolo : “ &


Match.SubMatches(1) & vbCrLf
txtResult.Text = txtResult.Text & “Descrizione articolo: “ &
Match.SubMatches(5) & vbCrLf
txtResult.Text = txtResult.Text & “Gruppo merceologico : “ &
Match.SubMatches(2) & vbCrLf
txtResult.Text = txtResult.Text & “Famiglia merceolog. : “ &
Match.SubMatches(3) & vbCrLf
txtResult.Text = txtResult.Text & “Sottofamiglia merc. : “ &
Match.SubMatches(4) & vbCrLf
txtResult.Text = txtResult.Text & “Unità di misura : “ &
Match.SubMatches(6) & vbCrLf
If Match.SubMatches(7) <> “” Then
txtResult.Text = txtResult.Text & “Data del lotto : “ & _
CDate(Match.SubMatches(7) & “/” & _
Match.SubMatches(8) & “/” & Match.SubMatches(9)) & vbCrLf
End If
txtResult.Text = txtResult.Text & “Codice a barre 1 : “ &
Match.SubMatches(10) & vbCrLf
txtResult.Text = txtResult.Text & “Codice a barre 2 : “ &
Match.SubMatches(11) & vbCrLf
txtResult.Text = txtResult.Text & “Codice a barre 3 : “ &
Match.SubMatches(12) & vbCrLf
txtResult.Text = txtResult.Text & “Codice a barre 4 : “ &
Match.SubMatches(13) & vbCrLf
txtResult.Text = txtResult.Text & “Codice a barre 5 : “ &
Match.SubMatches(14) & vbCrLf

txtResult.Text = txtResult.Text & vbCrLf & _


“========================================================” & _
vbCrLf & vbCrLf & vbCrLf
Next

sere dinamicamente rappresentate da gruppi (CP)


estratte dalla stringa di origine. Per semplifi-
care, dato un testo di origine: A questo punto si procederà con l’esecuzione
della Replace sulla stringa in questione:
CP è la prima rivista di programmazione
in Italia. CP è edito dal Gruppo Editoriale Dim RegEx As RegExp
Infomedia. Dim replacedString As String

Si potrebbe voler sostituire la parola CP con Set RegEx = New RegExp


Computer Programming, ogni volta che si pre- RegEx.Pattern =”(CP)”
senta nella stringa. Si procederà quindi in que- RegEx.IgnoreCase = True
sto modo: innanzitutto si definirà il pattern RegEx.MultiLine = True
che trova le occorrenze di CP nella parola. RegEx.Global = True

24 VBJ N. 75 - Maggio/Giugno 2007


TECNICHE

Figura 3 Accesso puntuale ai gruppi estratti

Figura 4 L’effetto della Replace sulla nostra stringa d’esempio

Un’altra possibilità offerta dalla Replace è


La Replace è la quella di sostituire le sottostringhe che cor-
possibilità di effettuare rispondono ad un certo pattern, con gruppi
catturati nel pattern stesso. Per meglio com-
la sostituzione prendere questo concetto, si torni all’esem-
di occorrenze di pio della stringa di importazione anagrafiche
articoli. Si potrebbe, ad esempio, voler sosti-
sottostringhe con altre tuire l’intero match catturato, con il seguen-
sottostringhe te pattern di Replace:

Gruppo: $3 Famiglia: $4 Sottofamiglia: $5 ($6)

replacedString = RegEx.Replace(“CP è la prima Si vuole cioè che ciascun gruppo di record


rivista di programmazione in Italia. CP è edito del file importazione (record IDX001, IDX002,
dal Gruppo Editoriale Infomedia.”, “Computer ecc…) venga sostituito con una stringa del
Programming”) tipo “Gruppo: ” seguita dal codice del Grup-
po Merceologico che verrà preso direttamen-
Il risultato, cioè il contenuto della variabile te dal gruppo (dalla sotto-occorrenza) numero
replacedString, sarà: 3 definita nel nostro pattern (per identifica-
re un gruppo in un pattern di Replace si usa
Computer Programming è la prima rivista di pro- una sintassi che prevede un carattere $ segui-
grammazione in Italia. Computer Programming è to dal numero posizionale del gruppo), segui-
edito dal Gruppo Editoriale Infomedia. ta a sua volta dalla stringa “Famiglia: ” con il
relativo codice di Famiglia Merceologica pre-

N. 75 - Maggio/Giugno 2007 VBJ 25


TECNICHE

Listato 3

procedure TForm1.cmdProcessClick(Sender: TObject);


var
RegEx : TRegExp;
MatchItem : Match;
SubMatchColl : ISubMatches;
Group : OleVariant;
i, j: Integer;
begin
RegEx:= TRegExp.Create(nil);
RegEx.Pattern := txtPattern.Text;
RegEx.IgnoreCase := True;
RegEx.MultiLine := True;
RegEx.Global := True;
MatchColl:= RegEx.Execute(txtText.Text) as IMatchCollection2;

txtResult.Clear;
For j:= 0 to MatchColl.Count - 1 do
begin
MatchItem:= MatchColl[j] as IMatch2;
txtResult.Lines.Add(‚Match: ‚ + MatchItem.Value);
SubMatchColl:= MatchItem.SubMatches as ISubMatches;

For i:= 0 to SubMatchColl.Count - 1 do


txtResult.Lines.Add(‚Group: ‚ + IntToStr(i + 1) + ‚ = ‚ + SubMatchColl[i]);

txtResult.Lines.Add(#13#10 +
‚========================================================‘ +
#13#10#13#10#13#10);
end;
cmdExtractData.Enabled:= True;
end;
End Class

sa dal gruppo numero 4, e così via. to COM duale, è opportuno considerare il


Si osservi dunque il codice del progetto di suo utilizzo anche da linguaggi diversi da
esempio Visual Basic 6: Visual Basic e persino da linguaggi non Mi-
crosoft, come ad esempio Borland Delphi. Il
Dim RegEx As RegExp tool di casa Borland non dispone nativamen-
Dim replaceText As String te di una implementazione delle Espressioni
Regolari per cui probabilmente l’uso di que-
Set RegEx = New RegExp sta libreria, gratuita e sufficientemente sofi-
RegEx.Pattern = txtPattern.Text sticata e potente, resta la soluzione migliore
RegEx.IgnoreCase = True anche nella applicazioni Delphi, pur essen-
RegEx.MultiLine = True do disponibili in forma freeware, shareware o
RegEx.Global = True commerciale, diverse soluzioni di terze parti
txtResult.Text = RegEx.Replace(txtText.Text, in codice. Essa peraltro è gratuita e già pre-
txtReplacePattern.Text) sente sulle macchine client di tipo Windows
XP o su macchine Windows su cui è installa-
Il risultato che otterremo a video è mostra- to Internet Explorer 6.
to in Figura 4. Per il suo utilizzo si dovrà procedere in-
La libreria in Delphi nanzitutto alla importazione della Typeli-
brary (menù Project \ Import Type Library
Considerando che libreria Microsoft VB- \ Install) come mostrato in Figura 5. Questa
Script Regular Expressions 5.5 è in forma- operazione produrrà la solita unità di codice

26 VBJ N. 75 - Maggio/Giugno 2007


TECNICHE

VBScript RegEx
5.5 resta la
soluzione
migliore anche
rispetto ad altre
implementazioni
native
nativo di proxy sul componente COM, che
nel caso specifico si chiamerà VBScript_Re-
gExp_55_TLB.
Fatto questo, il codice Delphi sarà pratica-
mente identico a quello visto per VB6. Nel-
la directory \DelphiRegEx dei sorgenti è di-
sponibile il progetto RegEx.dpr che poi altro
non è che il rifacimento in Delphi del prece-
Figura 5 La referenza da usare nei progetti Delphi dente esempio VB. Osserviamone un esem-
pio nel Listato 3.

N. 75 - Maggio/Giugno 2007 VBJ 27


TECNICHE

Listato 4

procedure TForm1.cmdProcessClick(Sender: TObject);


var
RegEx : TRegExp;
i, j: Integer;
begin
RegEx:= TRegExp.Create(nil);
RegEx.Pattern := txtPattern.Text;
RegEx.IgnoreCase := True;
RegEx.MultiLine := True;
RegEx.Global := True;

MatchColl:= RegEx.Execute(txtText.Text);

txtResult.Clear;
For j:= 0 to MatchColl.Count - 1 do
begin
txtResult.Lines.Add(‚Match: ‚ + MatchColl[j].Value);
For i:= 0 to MatchColl.Item[j].SubMatches.Count - 1 do
txtResult.Lines.Add(‚Group: ‚ + IntToStr(i + 1) + ‚ = ‚ + MatchColl[j].SubMatches.Item[i]);
txtResult.Lines.Add(#13#10 +
‚========================================================‘ +
#13#10#13#10#13#10);
end;
cmdExtractData.Enabled:= True;
end;

Ed ecco il nostro programma, dopo la “tra- cata di VBScript_RegExp_55_TLB.pas sosti-


duzione” Delphi, in esecuzione come viene tuendola a quella prodotta in modo automati-
mostrato in Figura 6. Per quanto riguarda gli co da Delphi. Da quel momento in poi potre-
oggetti in versione Delphi bisogna tener con- te utilizzare tutte le proprietà e i metodi del-
to di qualche curiosa differenza, legata al più l’oggetto RegExp e anche l’editor di Delphi
basso livello in cui Delphi opera con gli ogget- vi verrà in aiuto attraverso il Code Completa-
ti COM rispetto a Visual Basic. Innanzitutto tion. Le cose si complicano leggermente per
si consideri che l’oggetto principale della li- gli altri oggetti della libreria, cioè Match, Ma-
breria, cioè RegExp, nel proxy Delphi assu- tchCollection, ecc… In questo caso l’importa-
me il familiare nome di TRegExp e diventa zione non ha prodotto codice di proxy altret-
istanziabile nella forma tradizionale: tanto efficiente. Innanzitutto questi altri og-
getti non sono direttamente istanziabili come
var accade per RegExp, ma vengono restituiti da
RegEx : TRegExp; metodi e proprietà di altri oggetti. Ad esempio,
RegEx:= TRegExp.Create(nil); come si ricorderà, il metodo RegExp.Execute
restituisce un’istanza di MatchCollection, la
Per la comprensione dei concetti che ver- proprietà MatchCollection.Item restituisce
ranno esposti di seguito è necessaria una co- un’istanza di Match che, a sua volta, espone
noscenza, seppur minima, di Microsoft COM, una proprietà Match.SubMatches appunto di
per cui se non siete proprio ferrati sull’argo- tipo SubMatches.
mento, potete saltare direttamente alla par- Nell’importazione, però, i valori di ritorno
te delle conclusioni dell’articolo, senza però dei metodi e delle proprietà RegExp.Execute,
dimenticare di includere la versione modifi- MatchCollection.Item e Match.SubMatches,

28 VBJ N. 75 - Maggio/Giugno 2007


TECNICHE

Figura 6 Il client Delphi 6 in azione

nel proxy che Delphi ha creato a partire dal- Si può osserverare come, utilizzando l’ope-
la Typelibrary, hanno perso il tipo specifico e ratore “as”, si effettua il casting dei tipi alla
sono stati sostituiti con dei generici IDispatch, corretta interfaccia. Per ovviare a questi pro-
cioè l’interfaccia fondamentale di automazio- blemi che appesantirebbero molto il codice,
ne COM. Questo, oltre a non far funzionare il è sufficiente “correggere” la unit di proxy
Code Completation dell’ambiente di sviluppo e generata dall’importazione, cioè VBScript_
ad obbligare ad accedere agli oggetti via auto- RegExp_55_TLB.pas, sostituendo nelle in-
mazione e quindi in late binding, anziché uti- terfacce importate tutte le occorrenze errate
lizzare le interfacce appropriate, costringe ad di IDispatch con il tipo relativo. Ad esempio
effettuare il casting dei tipi come mostrato in osserviamo come correggere il metodo Exe-
questo estratto di funzione: cute di TregExp; originariamente esso si pre-
senta così:
var
RegEx : TRegExp; function TRegExp.Execute(const sourceString: WideString):
MatchItem : Match; IDispatch;
SubMatchColl : ISubMatches;
La nuova versione invece sarà:

RegEx:= TRegExp.Create(nil); function TRegExp.Execute(const sourceString: WideString):
MatchColl:= RegEx.Execute(txtText.Text) as IMatchCollec- IMatchCollection;
tion2;
MatchItem:= MatchColl[1] as IMatch2; A questo punto il Code Completation fun-
zionerà a dovere e il vostro codice sarà più

N. 75 - Maggio/Giugno 2007 VBJ 29


TECNICHE

Opzione Significato Descrizione


Nessuna opzione è impostata. Corrisponde all’enumerativo
Nessuna
RegexOptions.None.
Effettua la scansione della stringa in modalità case insensitive, cioè non fa
I Case insensitive differenza tra le maiuscole e le minuscole (“CIRO” = “ciro”). Corrisponde
all’enumerativo RegexOptions.IgnoreCase.
Imposta la scansione in modalità multiline, cioè interpreta i token ^ e $
M Multiline come indicatori di inizio e fine linea e non inizio e fine stringa. Corrisponde
all’enumerativo RegexOptions.Multiline.
Cattura i soli gruppi per i quali è stato definito un nome ed ignora tutti gli altri.
N Cattura esplicita
Corrisponde all’enumerativo RegexOptions.ExplicitCapture.
È una caratteristica dell’implementazione.NET delle Regular Expression:
permette cioè di creare e compilare al volo un oggetto.NET in grado di
interpretare la RegEx impostata. Se presente, la scansione avviene quindi
C Compilato
sempre con un oggetto che è in grado in modo nativo di gestire quel
pattern e non in modo interpretato come accade normalmente. Corrisponde
all’enumerativo RegexOptions.Compiled.
Imposta la scansione in modalità singleline: interpreta i token ^ e $
S Singleline come indicatori di inizio e fine stringa. Corrisponde all’enumerativo
RegexOptions.Singleline.

Ignora gli spazi Ignora gli spazi bianchi presenti nella RegEx. Corrisponde all’enumerativo
X
bianchi RegexOptions.IgnorePatternWhitespace.

Impone la scansione della stringa da destra verso sinistra. Può essere


R RightToLeft impostata solo all’inizio del pattern. Corrisponde all’enumerativo RegexOptio
ns.RightToLeft.

Questa opzione impone la compatibilità con le regole dello standard


ECMAScript. In realtà è da considerarsi come una metaopzione perché non
ECMAScript descrive alcun comportamento specifico, ma si abbina alle opzioni Ignore
Case, Multiline e Compiled rendendole confacenti ad ECMAScript. Corrisponde
a RegexOptions.ECMAScript.
Tabella 1

veloce perché non dovrà accedere all’ogget- // Modifica: si sostituisce il tipo IDispatch col più ac-
to COM via automazione, operazione che co- curato IMatchCollection
sta molto in termini di overhead. Lo stesso // property Item[index: Integer]: IDispatch read Get_Item;
dicasi, ad esempio, per il metodo Get_Item default;
e per la proprietà Item dell’interfaccia IMa- property Item[index: Integer]: IMatch2 read Get_Item;
tchCollection. default;

// Modifica: si sostituisce il tipo IDispatch col più ac- Saltiamo ora il resto delle modifiche (che co-
curato IMatchCollection munque potrete osservare nel sorgente della
// function Get_Item(index: Integer): IDispatch; safe- unit di proxy), per osservare invece il metodo
call; TForm1.cmdProcessClick nella nuova forma
function Get_Item(index: Integer): IMatch2; safecall; più compatta e più user-friendly (Listato 4).

30 VBJ N. 75 - Maggio/Giugno 2007


di Gianluigi Davassi > davassi@infomedia.it La programmazione concorrente e i thread

della classe 4),


(Figura Thread
che, perchefortuna,
esegue la sincronizzazione
appare solo la primaèvolta Join().
che Con questa base,
Nonostante le semplice ma necessaria,
ritrosie all’utilizzo TECNICHE
possiamo
quotidiano diaffrontare,
questi di-
Di viene
fatto, caricata
l’operazione la DLL. di Join consiste
Possiamo nel bloccare
concedere il threaddi
il permesso nel prossimo
spositivi, le numero,
potenzialità concetti più complessi
del mobile in ambito di sincronizza-
aziendale ed
chiamante
esecuzione finoeda ignorare
che il thread specificato non termini.
il messaggio. zione come
IT sono i mutex,esplosive
talmente i semafori,
da le sezioniquasi
risultare critiche, gli eventi,
preoccupanti.
Si veda, ad esempio,
· Concesso il Listatoeureka!
il permesso... 9 (C#)Premendo
e la Figurail5.tastoSi puòam- i meccanismi
Le possibilitàdiofferte
comunicazione, ecc. Tratteremo
da un Internet anche dei
pervasivo, accessibile
Conclusioni sticate che possono realmente mandare in pen-
notare che Main()
mireremo il nostrosi ferma,
PocketPcdapprima,
spegnersi,alla eistruzione
dopo 5 secondi deadlock,
dovunque che si verificano
e da chiunque sonoquando vi sono
destinate dei conflitti
a cambiare nella
il nostro
riaccendersi. Una possibilità che la normale J9 sicuramente sione
modoogni altra forma
sincronizzazione.
di lavorare Tratteremotradizionale
del debugging
e di investire. di manipo-
ed altro ancora.
Il mobile-commerce (al-
non prevede!
tid1.Join() Le Espressioni Regolari sono uno stru- lazione dellem-commerce)
tresì detto
Ovviamente, stringhe.
sempre con loadstessoesempio è solo
stile… un petalo
tramite della
esempi.
mento molto potente, ma presentano una Nelrosafrattempo
del futuro che esercitatevi pure a tirarlofuori
ci aspetta. Approfondire sviluppo su
in attesa curva
che termini di apprendimento
il primo thread,iniziale non bana-
poi alla istruzione dispositivi Mobile,
espressioni regolari sempre
da connessi estringa
qualsiasi pervasivi,viincentivan-
ca-
Download del progetto
Conclusioni e possibilità di sviluppo
le; invece l’apprendimento e l’uso di alcu- piti per le mani. E potete anche (\s*cominciare) è alle
do sull’utilizzo di tecnologie opensource (PhoneMe
tid2.Join()
ne librerie che implementano motori Re- porte
Scarica
adesso^… e ilil Linux
progettodelcompleto
tablet Nokia770
di questo rappresenta un’ottima
articolo all'indirizzo:
A livello di programmazione, nel caso si abbiano conoscenze alternativa a WindowsMobile) rappresenta uno degli scenari
ftp://ftp.infomedia.it/pub/DEV./Listati/Dev149/Speciale.zip
gEx è quanto di più semplice si possa de-
in di C++,
attesa le possibilità
che termini ildisecondoestenderethread.
la J9 attraverso
Infine JNI Main()sono più interessanti del nostro futuro.
siderare.illimitate. Ad esempi, è possibile estendere
potenzialmente
termina. Da notare il passaggio di una variabile al thread
la J9 per
tramite Eciòl’implementazione
il metodo che concerne
Start(var).laIn VBScript
connettività,
questo Regular
casoil supporto
non può sonoro,
essere Bibliografia
Giovanni Viva
usata Expressions
il supporto
una istanza grafico, 5.5 è proprio
fino alla possibilità
di ThreadStart una di queste.un
di implementare
ma una istanza di Paramete- Gianluigi Davassi
database
rizedThreadStart. SQL.Il
Perché Èdunque
chiaro
Listato che10semostra
non J9 implementasse
utilizzarla nelleun
la versione maggior
invostre
C++. [1]ÈV. Vessia
laureato in -Fisica
“Regular Expression
ed è attualmente – Prima
impiegato, Par-
come responsabile
numero
I concetti, di funzionalità
applicazioni
discussi in precedenza facilmente
Visual Basic, utilizzabili,
Delphi
(nel caso attirerebbe
C#),evengono
quan- te”, Laureato
Visual
dello a Pisa
Basic
sviluppo in Ingegneria
Journal
software, in R&S 74Informatica,
n. di appassionato
una società del gruppo Selex di
un gran
applicati numero
parimenti.
t’altro? di sviluppatori e di aziende disposte a in- programmazione di Java/C++ è cofondatore di
Finmeccanica. Svolge attività di docenza per Prometheo, OmegaDream (http:
vestire
Questa prima nel mondo mobile utilizzando Java. È già in corso //www.omega-dream.com) unacon
società specializzata
di Romanello sviluppo
Nellaparte prossima sui fondamenti
ed ultima parte termina di qui.
questo Ho collaborando, in particolare,
Riferimenti la sede Centro. Si
un progetto
introdotto, insiemeopen ad source
alcuni con questo le
concetti, obbiettivo,
basi della Jomega
pro- di applicazioni e sistemi su dispositivi Mobile. Gestisce un
occupa, fondamentalmente, di sistemi paralleli, con caratteristiche progetto
breve corso su RegEx esamineremo
(http://jomega.sourceforge.net). ingestisco
det-
grammazione multitasking tramiteÈiun progetto
thread. Hoche mostrato opensource
real-time edchiamato JOMEGA
usa linguaggi (http://jomega.sourceforge.net),
C-like (C, C++, C#, ecc.). Da una
taglio laedben
personalmente più potente
implementa anche implementazione delle libSDL [2] V. Vessia – “Programmare ilJNI.
cellulare” - Hoe-
alcuni esempi riguardo la creazione deiun porting
thread, il significato libreria che estende la J9 attraverso Attualmente
qualche anno lavora con Microsoft Visual Studio .NET e è impiegato
RegEx
(http://www.libsdl.org) fornita nel.NET
per la Framework
gestione
del foreground, del background e della priorità. Infine, della ed im-
grafica. ho pliWindows
– 2002 –CE.NET
all’interno Capitoli
della su1sistemi
Ksolutions e 3.
(http://www.ksolutions.it)
embedded. e lavora al
Le possibilità
plementeremo offerte dai dispositivi
alcune
accennato ai principi della sincronizzazione. mobile
tecniche sono
molto ancora
sofi-un framework CMS opensource Kaistarv (http://www.kaistar.org).
fenomeno acerbo e poco sfruttato, almeno qui in Italia.

>> 42 2007 VBJ


DEV > n.151
N. 75 - Maggio/Giugno 31
maggio 2007
DEV > n.149 marzo 2007 27 <<
Prodotti & News
Potete inviare i vostri comunicati stampa all’indirizzo:
comunicatistampa@infomedia.it

Programmare con Visual passa velocemente al quarto capitolo come utilizzare il programma gra-
Basic 2005 oltre il codice dedicato alla creazione dei pacchetti tuito Microsoft SandCastle, un tool
di installazione, argomento molto adatto a questo scopo.
sentito tra i vari programmatori Il capitolo 9 è dedicato a come
Visual Basic. NET. In questo capitolo migliorare la stesura del codice; nel
il lettore viene guidato passo dopo capitolo vengono dati consigli su
passo alla creazione di un vero pac- come rendere il codice con un tocco
chetto d’installazione. di professionalità. Consigli utili ed
Nel capitolo 5, viene discusso ancora importanti per una buona e corretta
l’argomento riguardante la distribu- stesura del codice, che un buon pro-
zione dei programmi, ossia la crea- grammatore deve sempre seguire.
zione dei pacchetti di setup tramite Nel capitolo conclusivo, dedicato alla
l’utilizzo della tecnologia ClickOne, gestione degli assemby, si acquisisce
una nuova tecnologia per il rilascio e il concetto di assemby, di come
l’aggiornamento del software. L’auto- analizzarlo tramite lo strumento gra-
re prima di addentrarsi nell’utilizzo di tuito Microsoft FxCop, come rendere
questa tecnologia introduce l’argo- sicuri gli assemby tramite la tecnica
mento con una panoramica generale. dell’offuscamento utilizzando il pro-
Viene illustrata non solo la creazione, dotto DotFuscator.
ma anche la rimozione e l’aggiorna-
mento dell’ applicazione. In entrambi Il libro – ben fatto sia a livello di
i capitoli (4 e 5) si parla anche dei argomenti che per la sua imposta-
certificati, in modo da rendere più zione – illustra le tecniche di utilizzo
Programmare con Visual Basic 2005 è sicuro il pacchetto per l’installazione dell’ambiente di sviluppo Visual
il primo libro di Alessandro Del Sole, del software. Il sesto capitolo riguar- Studio 2005, e di come dotare le ap-
un libro che illustra alcune tecniche da creazione ed utilizzo di una guida plicazioni di funzionalità aggiuntive,
da utilizzare durante la scrittura di utente, di cui ogni applicazione che come appunto indicato dal titolo del
un programma con il linguaggio di si rispetta dovrebbe essere dotata; in libro. Un altro fattore interessante è
programmazione Visual Basic 2005. questo capitolo l’autore illustra come il fatto che nei vari capitoli si pren-
Alcuni esempi si riferiscono anche creare una guida in linea tramite lo dono in esame i diversi tool gratuiti
all’ambiente di sviluppo Visual Studio strumento gratuito Microsoft Help e non, in modo da ottenere degli
2005 Express. Workshop, che permette la creazione ottimi risultati.
Il libro è composto da 10 capitoli, dei file guida in formato.chm. Una
tutti dedicati all’utilizzo del nuovo volta terminata la creazione del file SCHEDA DEL LIBRO
ambiente di sviluppo, e in pratica per la guida, viene illustrata la tecnica
aiuta il lettore ad utilizzare al meglio Autore Alessandro Del Sole
di come utilizzare il file della guida
l’ambiente di sviluppo e a dotare di appena creato in una Windows Ap- Prezzo 35,00 €
nuove funzionalità le applicazioni che plication. Pagine 544
si vogliono realizzare. Il settimo capitolo riguarda sempre
Ma vediamo in dettaglio i vari capito- la parte della documentazione, ma ISBN 9788882336257
lo che fanno parte di questo libro. in particolare come si creano do- Anno 2007
Nel primo capitolo viene fatta una cumenti da aggiungere alla guida in
panoramica riguardante alcune linea di Visual Studio 2005 tramite
funzionalità di Visual Studio 2005; gli strumenti Microsoft Help 2.x SDK.
tramite numerose immagini e le Nel capitolo sono presi in esami i vari Da INTEL® nuovi
dovute formattazioni del testo è tool messi a disposizione del pro- compilatori per i
possibile acquisire subito familiarità grammatore. L’ottavo capitolo riguar- processori multi-core
con l’ambiente di sviluppo. Il secon- da la gestione dei commenti, ossia
do capitolo illustra le tecniche per come commentare in formato XML i Intel Corporation ha annunciato la
una gestione corretta dell’ambiente, propri programmi e generare la gui- disponibilità di due nuovi compila-
come per esempio la creazione ed da specifica per il codice sorgente. tori grazie ai quali gli sviluppatori
esportazione di un modello, la crea- Con il nuovo ambiente di sviluppo ed sono in grado di creare in modo
zione ed esportazione dei frammenti il nuovo framework anche in Visual
di codice (Code Snippet) tramite ap- efficiente applicazioni più affidabili
Basic 2005 è possibile utilizzare dei
posito tool, creazione di un pacchet- e dalle prestazioni elevate, in grado
commenti particolari, come avviene
to per Visual Studio Content Installer. per il linguaggio C#. Nel capitolo, di velocizzare i tempi di risposta dei
Nel terzo capitalo si parla di come tramite appositi esempi, si prendono computer. Intel® C++ Compiler e
estendere le funzionalità di Visual in esami i vari tag che fanno parte Fortran Professional Edition rappre-
Studio 2005, tramite appositi tool, dello schema per i commenti XML. sentano una combinazione unica di
macro o componenti aggiuntivi; si Per generare la guida l’autore spiega compilatori altamente ottimizzanti e

32 VBJ N. 75 - Maggio/Giugno 2007


Prodotti & News

dalle elevate. Questi prodotti offrono un periodo limitato di tempo presso i F-Secure Internet Security 2007
il nuovo supporto automatico per ac- rivenditori di tutto il mondo. comprende uno degli antivirus più
celerare le prestazioni dei programmi Intel ha inoltre annunciato un nuovo rapidi a fornire copertura dalle nuo-
eseguiti con i più recenti processori pacchetto a prezzo scontato riserva- ve minacce e più abile nel bloccarle,
Intel® multi-core. Le applicazioni con to agli studenti che ne hanno diritto, un personal firewall, un antispyware
grafica 3D o video vengono automa- che include in un’unica soluzione e la nuova tecnologia proprietaria
ticamente accelerate tramite l’uso di anche Intel® VTune Performance DeepGuard, che arresta qualsiasi
vettori mediante le istruzioni Strea- Analyzer, Intel® Thread Checker e attività potenzialmente pericolosa
ming SIMD Extension (SSE), compre- Intel® Thread Profiler o sospetta in atto all’interno del
sa la più recente versione SSE 4. PC. FSIS2007 filtra inoltre la posta
Le prestazioni delle applicazioni Per ulteriori informazioni, visitare il indesiderata (grazie al sistema anti-
vengono inoltre accelerate dai pro- sito web all’indirizzo spamming) e i tentativi di phishing.
cessori multi-core tramite l’uso di più www.intel.com/software/products. Grazie alla funzione Parental Control,
thread. Abbinando l’uso di vettori e infine, è possibile regolare la naviga-
thread e integrando gli stessi con I prodotti per la sicurezza zione e bloccare l’accesso dei minori
una tecnologia nota come “loop di F-Secure indirizzati al a siti Web dai contenuti discutibili o
transformation” è possibile aumen- mercato consumer suppor- pericolosi.
tare le prestazioni delle applicazioni tano anche Windows Vista
su i processori multi-core senza la Su http://www.f-secure.it/home_
necessità di riscrivere il codice. Oltre Le soluzioni di protezione di F-Secu- user/compraonline/fsis2007.html
alle ottimizzazioni per i processori re indirizzate al mercato consumer tutte le informazioni su prezzi e for-
multi-core, queste funzionalità com- F-Secure Internet Security 2007 mule di licenza.
binate tra loro offrono altri vantaggi (FSIS2007) e F-Secure Anti-Virus
agli sviluppatori, quali la possibilità 2007 (FSAV2007) da oggi supportano inLive Interactive: canali
di individuare vulnerabilità che non anche il sistema operativo Windows video automatizzati e inte-
verrebbero altrimenti rilevate, ad Vista. Le versioni ottimizzate per rattivi
esempio variabili non inizializzate e Vista sono il frutto di un lungo e ac-
possibili overrun del buffer. curato test mirato a fornire ai clienti inLive Interactive, fornitore pioniere
la massima qualità. di soluzioni end-to-end in tempo rea-
Intel® C++ Professional Edition per Le due nuove versioni per Vista sa- le, interattive e ad ampia partecipa-
Windows*, Linux* e Mac OS* X rac- ranno acquistabili presso i rivenditori zione, annuncia il lancio europeo del
chiude in sè il compilatore Intel e le di F-Secure a partire da fine giugno, canale inLive automatizzato. La piat-
soluzioni Intel® Math Kernel Library, mentre i clienti che già possiedono taforma inLive Quad Play consente
Intel® Integrated Performance Pri- una regolare licenza per FSIS2007 agli operatori di creare e distribuire
mitives e Intel® Threading Building e/o FSAV2007 potranno aggiornare i interattivamente canali automatizzati
Blocks. loro prodotti gratuitamente a partire video-TV su ogni media, Mobile TV,
da oggi, collegandosi a http://www.f- IPTV, TV e Internet TV.
Intel Fortran Compiler Professional secure.it/vista/consumers. Da fine Le soluzioni inLive offrono formati
Edition per Windows, Linux e Mac OS luglio, saranno inoltre disponibili interattivi ad utenza globale (gio-
X combina il compilatore Intel con In- versioni OEM dei due prodotti per chi, notizie, sport, musica, e aste),
tel Math Kernel Library. Per la prima integratori e rivenditori che vogliano si tratta di strumenti personalizzati
volta, Intel® Visual Fortran Compiler incorporarle nelle loro proposte di per opeatori telecom e coloro che
10.0 include Microsoft Visual Studio, notebook e PC desktop. si occupano in generale di telecomu-
che rende disponibile l’ambiente di Le versioni per Vista sono state po- nicazione, che dimostrano sempre
sviluppo visivo per creare, modifica- tenziate e migliorate in numerose più interesse relativamente alla con-
re, generare e eseguire il debug di caratteristiche pur mantenendo sem- vergenza dei servizi mobile e delle
applicazioni Fortran. pre la semplicità d’uso cui gli utenti trasmissioni video.
F-Secure di tutto il mondo sono abi- La tecnologia più nuova: la piattafor-
I nuovi prodotti sono già disponi- tuati. Il meticoloso periodo di svilup- ma Quad Play
bili sul mercato a prezzi consigliati po e testing cui sono stati sottoposti InLive Interactive presenta al merca-
compresi tra 599 e 1.599 dollari USA. è stato voluto da F-Secure per garan- to la prossima generazione di video
Gli aggiornamenti alle Professional tire compatibilità assoluta con Vista e interattivi fornendo una soluzione
Edition dalla versione precedente dei massima affidabilità nella protezione end-to-end per consentire una par-
compilatori Intel sono disponibili per dalle minacce informatiche. tecipazione globale in tempo reale

N. 75 - Maggio/Giugno 2007 VBJ 33


Prodotti & News

e automatizzata con canali video su tivi con un feedback personale per tore 3D real-time per creare grafica
ogni supporto: Mobile TV, IPTV, TV ogni partecipante. tridimensionale renderizzata in tem-
and Internet TV. po reale con strumenti integrati ed il
La rivoluzionaria tecnologia di inLi- Per ulteriori informazioni consultare motore Sprite Animation per svilup-
ve Interactive, la piattaforma Quad il sito www.allplay.tv pare superfici sprite che integrano la
Play, offre agli spettatori televisivi rilevazione delle collisioni.
sparsi in tutto il mondo una nuova Rilasciato REALbasic 2007
dimensione di interattività con i R3 Per ulteriori informazioni:
programmi TV. Un numero illimitato www.realsoftware.com
di telespettatori potrà collegarsi in REALbasic è costituito da un moder- .
contemporanea ai programmi TV, no linguaggio di programmazione Microsoft Project Server
condividendo lo stesso contenuto su orientato agli oggetti e da un am- Connector
ogni media e interagire utilizzando biente di sviluppo disponibile ed
il telefono (cellulare o a linea fissa), in grado di creare applicazioni per Microsoft ha annunciato la disponibi-
la tastiera del computer o controllo Windows, Macintosh e Linux. lità di Visual Studio Team Foundation
remoto STB. La piattaforma trasver- REALbasic è un ambiente di sviluppo Server – Project Server Connector
sale sincronizzata di interazione può rapido per applicazioni (RAD) che (PS-TFS Connector), uno strumento
essere integrata senza soluzioni di consente di aumentare notevolmen- in grado di fornire una maggiore in-
continuità in ogni tipo di program- te la produttività degli sviluppatori tegrazione tra Team Foundation Ser-
mazione: voto in tempo reale, giochi, rispetto ad altri strumenti di sviluppo ver e Microsoft Office Project 2007.
quiz, scommesse, acquisto o aste. cross-platform. Include pieno sup- Grazie all’integrazione tra ambiente
Inoltre con le sue soluzioni tecnolo- porto al drag-and-drop per disegna- di sviluppo e strumenti di project
giche più recenti, con una console a re velocemente l’interfaccia utente, management, gli utenti avranno una
contenuto generico, inLive Interacti- consentendo di associare ad ogni visione completa e aggiornata delle
ve offre dei nuovi formati video in- elemento il relativo codice. informazioni necessarie per gestire in
terattivi, facili da usare, agli operatori REALbasic è altamente compatibile modo efficace i progetti di sviluppo
di tutto il mondo. con Visual Basic, tanto che i program- software nelle proprie aziende oltre
inLive Interactive collabora anche matori Visual Basic sono produttivi in che una migliore gestione delle risor-
molto da vicino con i suoi clienti, breve tempo con REALbasic. REAL- se e aggiornamenti automatici.
per progettare un contenuto inte- basic contiene anche un’utility per Visual Studio Team Foundation Ser-
rattivo per programmi già esistenti facilitare la conversione di progetti ver – Project Server Connector è un
nel settore dello sport, delle notizie, Visual Basic a REALbasic, dove con un ulteriore passo della strategia di Mi-
dell’intrattenimento, dei giochi, della semplice click possono essere compi- crosoft che mira, attraverso il rilascio
musica, e di programmi con conte- lati per Windows, Mac e Linux. di strumenti capaci di implementare
nuto generato a livello globale dagli REALbasic è disponibile ed in grado l’innovazione tecnologica, a rendere
stessi utilizzatori. di creare software per Windows 98, l’IT e lo sviluppo aziendale fattori
Con il multi-canale automatizzato NT, Me, 2000, XP e Vista, Mac OS sempre più strategici per il business.
inLive gli operatori mobile saranno X e Linux compilando il medesimo
in grado di creare e distribuire il loro codice sorgente. Incorpora elementi Symantec Endpoint Protec-
contenuto in modo indipendente. specifici per ogni piattaforma, come tion
Questo nuovo modo di lavorare per ad esempio per i componenti del-
gli operatori mobile rappresenterà l’interfaccia utente, in modo tale il Symantec Corpha compiuto un si-
un investimento produttivo econo- look and feel del software creato con gnificativo passo avanti nella propria
micamente dato che l’avvio e le ope- REALbasic è nativo, a prescindere strategia denominata Security 2.0
razioni di manutenzione mensili si della piattaforma utilizzata per lo svi- con l’annuncio di Symantec Endpoint
ridurranno al minimo. inLive fornisce luppo. Le applicazioni che fanno uso Protection 11.0 e Symantec Network
agli operatori mobile una piattaforma intensivo di dati utilizzano il database Access Control 11.0 (già noto con il
interattiva originale per creare nuovi REAL SQL, il motore database basato nome in codice di Hamlet).
flussi di guadagno per servizi con su SQLite integrato in REALbasic. È Symantec Endpoint Protection – il più
network GSM/CDMA/GPRS/Edge e possibile connettersi a motori di da- importante aggiornamento apporta-
3G/HSDPA/MediaFlo/DVB-H, offren- tabase multi-utente esterni utilizzan- to al pacchetto antivirus enterprise
do ai loro abbonati nuove esperienze do REALbasic Professional Edition. di Symantec da alcuni anni a questa
televisive con partecipazione mobile REALbasic supporta formati di grafica parte – combina Symantec AntiVirus
play-along e video TV mobile interat- vettoriale standard. Contiene un mo- con tecniche avanzate per la preven-

34 VBJ N. 75 - Maggio/Giugno 2007


Prodotti & News

zione delle minacce proponendo un tempi di installazione rapidissimi. sistema di Web Reputation sviluppa-
unico agente software che offre livelli Symantec ha inoltre presentato to dai Websense Security Labs, che si
di difesa senza paragoni nei confronti Symantec Network Access Control concretizza in tre nuove categorie
degli attacchi informatici diretti con- 11.0, nuova versione del modulo di siti web, che permettono alle
tro laptop, desktop e server. Syman- opzionale totalmente integrato con organizzazioni di gestire la propria
tec Endpoint Protection è già dispo- Symantec Endpoint Protection che sicurezza web in base al livello di
nibile nella versione beta pubblica aiuta i clienti a verificare e valutare lo tolleranza al rischio accettato.
all’indirizzo www.symantec.com/ stato dei client, consentire il livello di Le nuove categorie proteggono le
endpointsecurity. accesso appropriato alla rete e met- organizzazioni da siti che ospitano
Per proteggere gli utenti dalle minac- tere a disposizione funzioni di ripri- o potrebbero ospitare codice di
ce attuali così come da quelle future, stino affinché le policy e gli standard exploit, siti che ospitano account
Symantec Endpoint Protection adotta di sicurezza siano rispettati. usati per lo spamming, siti di “domain
tecnologie proattive che analizzano La disponibilità di entrambi i prodotti parking” e siti “click fraud” usati per
automaticamente il comportamento è prevista per il prossimo settembre. fuorviare i risultati dell’advertising
delle applicazioni e le comunicazioni Symantec Endpoint Protection 11.0 online generando fatturato illecito.
di rete in modo da intercettare e e Symantec Network Access Control Le nuove categorie proteggono
bloccare attivamente ogni tentativo 11.0 saranno disponibili in tutto inoltre da siti web che camuffano la
di attacco. Il prodotto integra fun- il mondo dal prossimo settembre loro vera natura o identità e siti “dor-
zioni antivirus, antispyware, firewall, direttamente o attraverso la rete di mienti” dagli intenti potenzialmente
controllo di applicazioni e dispositivi, rivenditori, distributori e system inte- maligni.
e include tecniche di host intrusion grator Symantec. Come dimostrato da attacchi web
prevention (HIPS) tutto in un’unica Per maggiori informazioni sui prodotti estesi come il recente Super Bowl e
soluzione software facile da installare e per scaricare la beta pubblica di Sy- gli exploit ANI, i software di sicurezza
e semplice da gestire. mantec Endpoint Protection è possibi- e i sistemi per la tutela della reputa-
Integrando soluzione tecnologiche le visitare il sito www.symantec.com/ zione tradizionali che guardano solo
avanzate (“best of breed”) di Syman- endpointsecurity. ai semplici attributi del sito non sono
tec, Sygate, Whole Security e Veritas, attrezzati per proteggere da queste
Symantec Endpoint Protection riduce Per ulteriori informazioni, con- minacce dinamiche.
i costi amministrativi che derivano sultare il sito web all’indirizzo A differenza dei sistemi di controllo
dalla gestione di più prodotti di sicu- www.symantec.it della reputazione degli indirizzi IP
rezza per client e server. dei siti basati sull’esame del semplice
Symantec Endpoint Protection si av- Websense amplia la nome di dominio, il sistema di Web
vale anche del supporto del Global protezione dai siti web Reputation di Websense sfrutta la
Intelligence Network di Symantec, tecnologia proprietaria ThreatSeeker
una struttura composta da otto Virus e worm allegati alle email non per adeguare in tempo reale il livello
Symantec Security Response Center, sono più la principale minaccia per di affidabilità del sito. Poiché un sito
quattro Symantec Security Opera- la sicurezza: il vero – e più insidioso web può trasformarsi molto rapida-
tions Center, 120 milioni di sistemi pericolo – viene dalla navigazione mente in un sito violato dagli hacker
e oltre 40.000 sensori installati in sul Web, dove proliferano siti spesso anche se la sua reputazione storica è
180 Paesi. dall’apparenza innocua o dall’ottima ottima.
Symantec Endpoint Protection è reputazione, ma pieni di codice ma- La nuova Web Security Suite 6.3.1 è
l’unico prodotto a integrare tutti i ligno creato per rubare informazioni immediatamente disponibile senza
vantaggi delle tecnologie di sicurez- e creare interruzioni dell’operatività costi aggiuntivi per tutti gli attuali
za (antivirus, antispyware, firewall aziendale. Web Security Suite 6.3.1, utenti della soluzione Websense. Le
desktop, intrusion prevention e de- la nuova versione del software per organizzazioni che vogliono provarla
vice control) all’interno di un unico la protezione contro le minacce del gratis per 30 giorni ed eseguire anche
agente gestito da un’unica console. Web annunciata da Websense, si una verifica dell’efficacia delle loro
Symantec Endpoint Protection of- focalizza proprio su questo e lo fa attuali soluzioni di sicurezza possono
fre una nuova console di gestione aggiungendo un nuovo insieme di collegarsi a:
semplificata, la possibilità di imple- categorie di minacce da bloccare alle www.websense.com/challenge
mentare tecniche di Network Access numerose già disponibili nel databa-
Control (NAC), più un ventaglio di se Websense. Per ulteriori informazioni sulla tec-
offerte di assistenza e formazione In particolare, gli utenti della soluzio- nologia ThreatSeeker di Websense:
per partner e clienti volte a favorire ne Websense avranno ora accesso al www.websense.com/threatseeker.

N. 75 - Maggio/Giugno 2007 VBJ 35


3235
.NET TOOLS
Gli add-in di Reflector – Parte I Il primo add-in che andiamo ad esaminare è Co-
di Fabio Perrone deMetrics: analizza un assembly e restituisce di-
versi indicatori che possono essere suddivisi per
Estendiamo il disassemblatore di.NET tipo, per metodo e per modulo. Gli indicatori che
più famoso vengono forniti in risposta variano ovviamente in
base a ciò che viene analizzato. I risultati spaziano
Reflector è lo strumento più amato/odiato dagli dalla complessità ciclomatica, cioè la misura del-
sviluppatori .NET: amato perché offre innume- la complessità di un programma partendo dal co-
revoli possibilità di controllare qualsiasi assem- dice sorgente, al numero di eccezioni e istruzioni
bly a nostra disposizione, odiato perché obbliga del singolo metodo. Interessante anche il numero
ad usare degli offuscatori di codice per protegge- di exception handler presenti in un determinato
re la proprietà intellettuale del codice stesso (in metodo, utili per migliorare eventualmente le pre-
particolar modo in presenza di algoritmi sensibi- stazioni di un’applicazione. Quando si analizzano
li). Tuttavia, essendo uno strumento assai diffu- i dati di un determinato tipo è possibile anche ot-
so e versatile è nata una community che ha svi- tenerne una rappresentazione grafica che confron-
luppato una serie di add-in di svariate tipologie ta visivamente le dimensioni dell’entità selezio-
ed utilità, che andremo ad esaminare in due arti- nata rispetto agli altri tipi. L’obiettivo principale
coli. Ovviamente abbiamo dovuto scegliere tra le di questo add-in è ovviamente quello di permet-
estensioni di Reflector disponibili, quindi queste tere di apportare delle modifiche al codice in caso
recensioni non intendono esaurire l’argomento, di complessità troppo elevata, in primo luogo per
quanto piuttosto portare a conoscenza le enormi migliorarne la manutenibilità futura, poi per ave-
potenzialità di Reflector e della sua estendibilità. re una visione più generalizzata dei tipi che sono
Installare gli add-in è semplicissimo: è sufficiente stati scritti e come sono stati scritti.
copiare gli assembly che formano l’add-in nella Il secondo add-in che prenderemo in considera-
cartella in cui è stato installato Reflector, lancia- zione è Diff. Ognuno di noi obbligatoriamente ag-
re Reflector stesso e dal suo menu View selezio- giorna il proprio software e quindi mette mano ad
nare la voce “Add-ins” che permetterà di sceglie- uno o più assembly che compongono un’applica-
re l’assembly dell’add-in che vogliamo aggiunge- zione. Normalmente gli strumenti per il control-
re. A questo punto, è sufficiente controllare nel lo del codice sorgente permettono di confronta-
menu Tools la presenza di una nuova voce che re un file sorgente con qualsiasi altra versione
indicherà il nuovo add-in. del file stesso, ma in questo caso stiamo discu-
tendo di un tool che permette di confrontare un
Fabio Perrone, laureato in Matematica e MCTS intero assembly e tutti i tipi che lo compongono
(Web) in C# 2.0, lavora presso TSF s.p.a. dove si in un’unica opzione. Oltre al confronto visuale è
occupa di progettazione e sviluppo di applicazioni molto utile la possibilità di esportare le differenze
Windows e Web. in modo ricorsivo in un file XML e così scrivere

36 N. 75 - Maggio/Giugno 2007
.NET TOOLS

Figura 1 Code Metrics

una piccola applicazione che analizzi questo file pleto e specializzato come l’IDE di Microsoft.
e possibilmente ne applichi una trasformazione L’ultimo add-in che prendiamo in considerazione
per tener traccia delle differenze (a livello di co- è Graph. Con questo strumento è possibile visua-
dice, quindi anche funzionale) presenti tra due lizzare un grafo disegnato in base alle dipenden-
versioni diverse di un assembly. ze di un assembly ed è utile quando si tratta di
Il terzo add-in che prendiamo in considerazione comprendere progetti particolarmente comples-
è il FileDisassembler. Uno dei “problemi” di Re- si oppure per visualizzare graficamente le corri-
flector è la difficoltà di manipolazione dei tipi di- spondenze tra assembly in modo grafico. È an-
sassemblati. Con il FileDisassembler è possibile che qui ovviamente possibile esportare e stam-
esportare un’operazione di disassemblamento di- pare il grafo, per ottenere una documentazione
rettamente in una libreria di classi, in un’applica- di un progetto esaustiva e completa.
zione Windows o in un’applicazione Console. Così In questa prima panoramica degli add-in per Re-
facendo è possibile successivamente importare il flector abbiamo analizzato alcune estensioni del
progetto in Visual Studio.NET per poter sfruttare potente tool di Lutz Roeder. Nel prossimo nume-
tutti i vantaggi di un ambiente di sviluppo com- ro approfondiremo ulteriormente l’analisi cercan-

N. 75 - Maggio/Giugno 2007 VBJ 37


.NET TOOLS

Prodotto
do di fornire un quadro completo del variegato e
Reflector add-ins
complesso mondo che gravita intorno a Reflector,
in modo che ognuno di noi possa avere a dispo- Url di riferimento
http://www.codeplex.com/reflectoraddins
sizione nella propria cassetta degli attrezzi degli
strumenti adatti per ogni esigenza che si possa Stato Release
Stabile
presentare durante la progettazione e lo svilup-
po di applicazioni enterprise. Semplicità d’uso ªªªª²
È sufficiente estrarre l’assembly contenente l’add-in nella stessa
cartella di Reflector
Utilità ªªªªª
Un grande aiuto per le diverse sfaccettature che riguardano il sof-
Reflector è lo strumento tware enterprise

più amato/odiato dagli Qualità prodotto ªªªªª


Affidabile, nei test sul prodotto eseguiti non ha mai mostrato par-
sviluppatori .NET ticolari problemi.
Qualità documentazione ªª²²²
Poco presente, anche perché l’utilizzo dei tool è immediato.

Figura 2 Graph

38 N. 75 - Maggio/Giugno 2007
.NET TOOLS

sposizione un tool completo, che alle funzionalità


Network Monitor 3.1 beta 2 di base del tipico sniffer affianca altri strumenti
di Raffaele Di Natale che lo rendono versatile e dinamico.

Un tool potente e completo per l’analisi del L’applicazione


traffico di una LAN
Network Monitor può essere usato sia per ana-
Etichettare questo tool come uno sniffer di rete lizzare i dati che circolano all’interno della rete
(l’ennesimo) significherebbe nascondere le mol- sia per analizzare gli eventuali guasti dei dati tra-
teplici funzionalità che soprattutto gli sviluppa- sferiti fra i nodi e dispositivi di una rete. Questo
tori possono apprezzare. tool ha la capacità di adattarsi facilmente alla fi-
gura tecnica che lo utilizza. Infatti, un ammini-
Introduzione stratore di rete normalmente lo usa per analizza-
re eventuali infrazioni nella rete locale, oppure
Chi ha avuto in passato la possibilità di conosce- per analizzare la fonte di eventuali colli di bot-
re e utilizzare la versione 2.1 dello stesso tool ha tiglia. Uno sviluppatore, invece, lo utilizza come
certamente optato per altri software concorrenti. un ulteriore strumento di debugging per le pro-
Questa volta però bisogna riconoscere che in casa prie applicazioni network based. Infine un Web
Microsoft hanno deciso finalmente di mettere a di- Administrator potrebbe trarre informazioni di

Figura 1 La finestra principale del tool in fase di avvio

N. 75 - Maggio/Giugno 2007 VBJ 39


.NET TOOLS

Figura 2 I risultati di un’analisi del traffico dati

Network Monitor non ovviamente si tratta di una beta, viene distribui-


è solo uno sniffer, ma to in due versioni distinte a 32e 64 bit, rispetti-
vamente per i sistemi di cui sopra a 32 e 64 bit.
un tool dinamico che si Entrambe le versioni possono essere scaricate dal
adatta alle differenti figure sito [1]. Ulteriori informazioni sul prodotto sono
fornite dai siti [2] e [3].
tecniche che lo utilizzano
Novità rispetto alla versione 3.0
basso livello circa tempi, connessioni ed attività
varie correlate alla connessione da parte di altri La versione 3.1 differisce rispetto alla 3.0 per al-
utenti al server web. cuni miglioramenti che riguardano l’interfaccia
e per nuove funzionalità. Le novità più interes-
Le versioni santi riguardano la possibilità di monitorare reti
WiFi 802.11 a/b/g e di intercettare traffico relati-
Network Monitor è compatibile con Windows vo a connessioni RAS/VPN.
XP, Windows Vista e Windows Server 2003. Inol- Per gli utilizzatori di Vista si raccomanda di ese-
tre, pur essendo un prodotto gratuito, anche se guire il tool come amministratore.

40 N. 75 - Maggio/Giugno 2007
.NET TOOLS

Filtri

Come qualsiasi sniffer che si rispetti, anche


Network Monitor consente di filtrare i pacchet-
ti che transitano nella rete. Sono disponibili due
tipi di filtri: i Display Filter che effettuano una
selezione dei pacchetti analizzati solo a livello di
visualizzazione ed i Caption Filter che filtrano in-
vece i pacchetti già in fase di lettura. Ciò signifi-
ca che ad esempio possiamo effettuare un’analisi
completa del traffico di rete e poi ad esempio vi-
sualizzare solo ed esclusivamente i pacchetti che
fanno riferimento al protocollo ARP (Display Fil-
ter), oppure richiedere di analizzare il traffico solo
dal punto di vista dei pacchetti ARP (Caption Fil-
ter). È chiaro che le due tipologie di filtri hanno
caratteristiche e performance differenti e vengono
scelte in relazione al problema affrontato.

Parser di protocolli

Network Monitor mette a disposizione una serie


Alcuni protocolli supportati dai parser di parser per i più diffusi protocolli di comunica-
Figura 3 di default zione, sebbene sia comunque possibile sviluppar-
ne ad hoc per particolari applicazioni. Network
Parsing Language (NPL) è il linguaggio utilizza-
to per lo sviluppo di tali parser di rete. La Figu-
Interfaccia e funzionalità ra 3 descrive una parte dell’elenco dei protocolli
supportati dai parser di default ed in Figura 4 si
In Figura 2 è descritta la finestra principale del- può osservare una porzione di script in NPL re-
l’applicazione al termine di una fase di analisi. lativo al parser definito in wireless.npl.
Come si può evincere dell’im-
magine, nella parte alta è pre-
sente la finestra per la gestione
dei filtri (nell’esempio in figura
sono stati filtrati solo i pacchetti
ARP, Capture Filter), nella par-
te centrale si trova la finestra
relativa al sommario dei frame
“catturati”, ed infine nella parte
bassa c’è la finestra dei dettagli
di un frame selezionato nella fi-
nestra centrale. Nell’esempio in
figura la scansione è stata effet-
tuata su una rete WiFi ed, infat-
ti, tra i dettagli del frame, si può
notare il campo WiFi. Figura 4 Porzione di codice del parser wireless

N. 75 - Maggio/Giugno 2007 VBJ 41


.NET TOOLS

Figura 5 La finestra di dialogo di nmwifi.exe

Network Monitor da riga di comando Scanning WiFi

Per tutte le situazioni in cui non si può fare Quando si utilizza Network Monitor per analiz-
a meno di lanciare l’applicazione da riga di co- zare una rete WiFi, i frame catturati si riferisco-
mando, Network Monitor mette a disposizione il no esclusivamente al traffico locale, tipicamen-
tool NMCAP.exe, che si trova all’interno della di- te dal nodo di partenza all’access point. Spes-
rectory di installazione del tool, e che permette di so questo non è ciò che desideriamo: potremmo
effettuare la maggior parte delle operazioni della avere la necessità di dover decidere a quale ac-
versione con GUI. Per questo tool è disponibile cess point connetterci in base a determinati fat-
sia l’help (digitando NMCAP /?) sia una serie di tori o semplicemente volere assistere al traffico
esempi di tipiche applicazioni (digitando NMCAP dati che avviene in prossimità della nostra rete
/examples). WiFi. Per tale ragione, sempre all’interno della

42 N. 75 - Maggio/Giugno 2007
.NET TOOLS

videre anche esternamente i risultati dell’analisi


(per esempio esportando in formato XML i frame
In aggiunta ai Parser di catturati) non dovrebbe comunque rappresenta-
protocollo standard è re un ostacolo al suo utilizzo. È vero anche che le
alternative al presente tool forniscono strumenti
possibile implementarne di analisi statistica, ma nel contempo sono spes-
di propri in NPL so più difficili da utilizzare.

Conclusioni
directory di installazione di Network Monitor, è
disponibile l’applicazione nmwifi.exe che, intera- La facilità di utilizzo è senz’altro la caratteristica
gendo con il tool principale, permette allo stesso più evidente di questo tool. Molteplici potrebbero
di mettersi in ascolto in modalità “Monitor”. La essere gli spunti di miglioramento, ma riuscire a
Figura 5 ne illustra la finestra principale. Al mo- “leggere” il traffico della nostra rete con una lente
mento non tutte le schede 802.11 sono supporta- d’ingrandimento così maneggevole può sorprende
te per la modalità monitor. Per un elenco detta- non solo i neofiti dello sniffing di rete.
gliato fare riferimento a [3].
Bibliografia e riferimenti
Punti di forza
[1] https://connect.microsoft.com
Network Monitor è uno strumento facilmente [2] http://support.microsoft.com/kb/933741/en-us
utilizzabile. Per partire basta davvero premere so- [3] http://blogs.technet.com/netmon/
lamente il pulsante Play. Modifiche all’ambiente
ed alla configurazione si rendono necessari solo
Raffaele Di Natale è laureato in Scienze dell’Informazione
in caso di analisi avanzate per risolvere problemi presso l’università di Catania, insegna Informatica presso l’ITI.
specifici o per esempio per attività di debug. La Attualmente si occupa di programmazione in ambito mobi-
prima particolarità di Network Monitor è quella le, di help authoring, content management system, content
syndication ed e-learning.
di riuscire ad analizzare più reti contemporanea-
mente: infatti, un simile tool solitamente si utiliz-
za in postazioni con più schede di rete, si pensi, Prodotto
Network Monitor 3.1 beta
ad esempio, ad un server equipaggiato con Win-
dows 2003 server. La seconda particolarità è rap- Url di riferimento
https://connect.microsoft.com
presentata dal fatto che è possibile lanciare più
sessioni di analisi contemporaneamente ottenen- Stato Release
v. 3.1 beta, stabile
do comunque un output altamente leggibile. In-
fine, oltre a “catturare” i dati della rete, Network Semplicità d’uso ªªªªª
Monitor consente di assegnare delle proprietà ai Tool di immediato utilizzo: in brevissimo tempo si impara ad ef-
fettuare analisi anche complesse.
frame. Tali proprietà verranno successivamente
utilizzate per raggruppare i frame catturati in una Utilità ªªªªª
In tutte le situazioni in cui è necessario effettuare un’analisi del traf-
struttura ad albero che prende il nome di Conver- fico dati un tool come Network Monitor è indispensabile.
sation. Di default, per questioni di efficienza, le
Conversation sono disabilitate.
Qualità prodotto ªªªªª
La Microsoft ha fatto il salto di qualità passando dalla versione
2.1 alla 3.0. Un ulteriore passo in avanti è stato fatto con que-
Punti di debolezza sta versione.
Qualità documentazione ªªª²²
Gli aspetti legati ad un’analisi statistica sono Pur essendo un tool di facile utilizzo, la documentazione a sup-
senz’altro i più trascurati. È senz’altro un gros- porto non appare sempre esaustiva.
so limite, ma la possibilità date dal tool di condi-

N. 75 - Maggio/Giugno 2007 VBJ 43


APPLICATIVI

Un centro di
controllo per server
remoti
Una utility rivolta agli amministratori (esperti e non) di sistemi operativi
Windows, che gestisce e controlla uno o più server da un unico punto di accesso.

di Mauro Magni

L’applicazione è basata sul browser Internet Descrizione


Explorer, un listener locale e uno o più server re-
moti. L’applicazione è composta di
Dal browser l’utente esegue un comando (di con- un listener locale e uno (o più)
trollo oppure di amministrazione) su un server re- remoti, entrambi funzionanti in
moto e successivamente su un altro senza diffi- ambiente Windows, scritti con il
coltà. linguaggio VB.NET ed utilizza-
Nella parte inferiore sinistra della schermata ini- no il framework.NET.
ziale sono visualizzate le descrizioni, mentre nel- Un listener è un particolare
la parte destra i comandi corrispondenti; un uten- tipo di server che è identifica-
te esperto più inoltre cambiare o aggiungere altri to dalla terna protocollo di tra-
comandi con le descrizioni corrispondenti (vedi il sporto (TCP,UDP), indirizzo IP
paragrafo “Migliorie”). del computer, numero di porta.
Per gli utenti più esperti che hanno scritto co-
mandi propri (script, utility) c’è la possibilità di Codice del listener locale
eseguirli sui server remoti (vedi il paragrafo “Uti-
lizzo dell’utility”). Creare una directory (per
esempio c:\srvlocal), crea-
re un file vuoto (per esempio
srvlocal.vb), copiare e salva-
Mauro Magni È uno specialista di sicurezza informatica su
mainframe (Z/OS).Ha lavorato come sistemista Unix,linux,AIX re il codice VB.NET riportato
SP2 (Unix IBM). nel Listato 1 (disponibile su
ftp.infomedia.it).

44 N. 75 - Maggio/Giugno 2007
APPLICATIVI

nagement Instrumentations):
Questa utility è rivolta agli
amministratori (esperti e select * from win32_pingstatus ….

non) di sistemi operativi Questa istruzione esegue un ping sul com-


Windows puter remoto e ritorna il valore dello stato:
Up or Down.
Il codice nella sezione ‘Esecuzione dei coman-
di del server locale', utilizzando la subroutine
L’istruzione imports System.Net.Sockets ExecDoscmd, esegue i comandi sul server lo-
(e System.Net) rende disponibile (al pro- cale mentre ‘Il server locale( ora client) invia
gramma) gli oggetti che ci consentono di il comando al server remoto …’ invia il coman-
creare una connessione TCP/IP tra un client do al server remoto (facendo uso della client
ed un server, mentre l’istruzione imports subroutine) ed attende la risposta.
System.Management serve per gestire gli
oggetti messi a disposizione dalla WMI (Win- Installazione del listener locale
dows Management Instrumentation). La WMI
è presente nel sistema operativo Windows e Prima di installare il server verificare la
serve per reperire qualsiasi tipo di informa- versione di.NET installato nel sistema ope-
zione sui computer presenti nella rete. rativo.
Nella sezione ‘Modulo principale’, il pro- È necessario avere installato il.NET fra-
gramma controlla che il server sia eseguito mework alla versione 2.0.50727.42 o superio-
correttamente specificando tutti i parametri ri. Per eseguire questa verifica cercare(avvio-
e le istruzioni che seguono dichiarano tutte >cerca->file o cartelle) nei file del computer
le costanti. il programma vbc.exe e dal prompt del DOS
La sezione intitolata ‘Codice Javascript che con il comando CD (change directory) portarsi
crea il form sullo..’ contiene il codice Java- nella directory che lo contiene (generalmen-
Script per controllare il valore dei campi in- te la directory è la seguente C:\WINDOWS\
seriti dall’utente nella schermata iniziale. Microsoft.NET\Framework\V.x.y.zzzzz), digita-
La sezione seguente ‘Codice Javascript per re vbc e premere il tasto invio; il risultato si
il messaggio di ShutDown dei listener’ contie- legge sulla seconda riga.
ne il codice per eseguire il display per lo Shu- Contrariamente, se.NET non è installato ese-
tDown del server locale o remoto. guire il download dal sito della Microsoft al-
L’istruzione tcpListener.start() nella sezione l’indirizzo:
‘listener parte sull’indirizzo IP specificato..’ http://www.microsoft.com/downloads/details
avvia il listener locale. L’istruzione tcpListen- .aspx?FamilyId=10CC340B-F857-4A14-83F5-2
er.AcceptTcpClient() mette in stato di attesa 5634C3BF043&displaylang=en
il server locale pronto per ricevere le richie- Per compilare il codice del listener locale,
ste dai client. creare il file srvlocal.cmd (nella directory
La sezione seguente ‘server locale legge i dati create in precedenza c:\srvlocal), copiare la
che l’utente gli invia..’ è il cuore del program- seguente istruzione:
ma; nella prima parte il listener locale riceve C:\WINDOWS\Microsoft.NET\Framework\
i dati dal client (browser), analizza i valori dei tuaversione\vbc srvlocal.vb /out:srvlocal.exe
campi Sistema, Comando, Opzioni e control- /t:exe
la se il server remoto è attivo. e salvare il file.
Per eseguire questo controllo ho utilizzato Rimpiazzare tuaversione con quello letto sul-
un oggetto dell’ambiente WMI (Windows Ma- lo schermo in precedenza (V.x.y.zzzzz).

N. 75 - Maggio/Giugno 2007 VBJ 45


APPLICATIVI

Figura 1

Dalla linea comandi del DOS digitare Loopback è un indirizzo di rete “fittizio” di
srvlocal.cmd e premere il tasto invio, sarà tutti i computer, infatti, ogni computer (de-
automaticamente creato il file eseguibile sktop oppure server, Windows oppure Unix)
srvlocal.exe che è il nostro listener locale. hanno questo indirizzo oltre a quello reale (es.
10.10.10.78). È fittizio perchè non è un indiriz-
Avvio del listener locale zo “visto” dagli altri computer della rete. So-
litamente si utilizza il local loopback quando
Dalla directory dove è stato creato il liste- si desidera fare un test di programmi ed ap-
ner (c:\srvlocal) avviare il server con la se- plicazioni su un computer non connesso alla
guente codifica: rete. Si pensi ad esempio ad un database o ad
Srvlocal.exe localhost 1957 a un web server in fase di sviluppo.
oppure Comparirà invece un messaggio di errore se
Srvlocal.exe 127.0.0.1 1957 il server sarà avviato con un numero di para-
metri non corretto.
In entrambi i casi il listener sarà avviato
sull’indirizzo di local loopback (localhost o Codice del listener remoto
127.0.0.1) e si metterà in ascolto sulla por-
ta 1957. Ora ci trasferiamo sul server remoto su

46 N. 75 - Maggio/Giugno 2007
APPLICATIVI

cui creiamo una directory (per esempio c:\


srvremote), creiamo un file vuoto (per esem-
pio srvremote.vb), copiamo e salviamo il co- L’utility proposta è
dice VB.NET del Listato 2 (anch’esso libera- composta di un listener
mente scaricabile da ftp.infomedia.it).
locale e uno (o più) remoti
Il funzionamento del server remoto è simi-
le a quello locale, con la sola differenza che
il suo unico compito è di ricevere i coman-
di, eseguirli e inviarli al richiedente (il ser- netstat -an | find “:port”
ver locale).
dove port è il numero della porta del server.
Installazione del Se sullo schermo non compare nessuna rispo-
listener remoto sta allora possiamo tranquillamente utilizza-
re la porta scelta in precedenza. Si raccoman-
Prima di installare il listener remoto è neces- da di utilizzare lo stesso numero di porta per
sario eseguire le medesime verifiche (presen- tutti i server remoti. Comparirà un messag-
za di.NET) effettuate per il server locale. gio di errore se il server sarà avviato con un
Per compilare il codice del listener remoto, numero di parametri non corretto.
creare il file srvremote.cmd (nella directory Importante: l’utente che avvia il listener re-
create in precedenza c:\srvremote), copiare la moto deve avere tutte le autorità per eseguire
seguente istruzione i comandi provenienti dal server locale.
C:\WINDOWS\Microsoft.NET\Framework\
tuaversione\vbc srvremote.vb /out: Configurazione dell’ambiente
srvremote.exe /t:exe
e salvare il file. Rimpiazzare tuaversione Il listener locale deve essere uno solo men-
con quello letto sullo schermo in preceden- tre quelli remoti sono uno o più a seconda
za (V.x.y.zzzzz). Dalla linea comandi del DOS della configurazione che si desidera conferi-
digitare srvremote.cmd e premere il tasto in- re all’utility.
vio, sarà automaticamente creato il file ese-
guibile srvremote.exe che è il nostro listener L’utility utilizza l’interfaccia browser
remoto. (Internet Explorer) ed è basata sulla pro-
grammazione client-server e sul protocollo
Avvio del listener remoto TCP/IP.
Lo scopo dell’utility è di eseguire un coman-
Dalla directory dove è stato creato il liste- do sul server remoto, da un unico punto, ed
ner (c:\srvremote) avviare il server con la se- attendere la risposta. La tipologia dei coman-
guente codifica: di è la seguente:

Srvremote.exe ipaddress porta • Eseguire verifiche es. (ipconfig, netstat,


nslookup...)
Ipaddress è l’indirizzo del server mentre por-
ta è un valore qualsiasi a partire da 1025; non • Eseguire comandi amministrativi
utilizzare porte occupate da altri servizi altri-
menti il server riceverà un errore. • Eseguire un proprio script o programma
Per eseguire questa verifica da una finestra
DOS digitare il comando Per inviare un comando sul server remoto

N. 75 - Maggio/Giugno 2007 VBJ 47


APPLICATIVI

Listato 2

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Module main

‘-------------------- Modulo principale ----------------------

Public Sub Main(Params As String())

Dim args As [String]() = System.Environment.GetCommandLineArgs()


If args.Length <> 3 Then
Console.writeline(“ “)
Console.writeline(“>>> Error during start-up “)
Console.writeline(“ “)
Console.WriteLine(“ Utilizzo: srvlocal.exe <ipaddr> <portnumber>”)
Console.writeline(“ “)
Return
End If

‘console.writeline(“ipaddr “ & params(0) & “ port “ & params(1))

Dim k as integer
Dim cmd as string = “ “
Dim opt as string = “ “
Dim strOutput as string = “ “
Dim strError as string = “ “
Dim textdelimiter as String = vbCrLf
Dim rowdispl as string = “ “
Dim Errmsg as string = “ “
dim ipaddr as string = Params(0)
Dim port As Int32 = Params(1)
Dim localAddr As IPAddress = IPAddress.Parse(ipaddr)
Dim msgshut as string = _
“<html><head></head>” & _
“<body bgcolor=’#000000’ scroll=no><br><br><br><br>” & _
“<table width=’100%’ align=’center’ border=’0’ cellspacing=’0’ cellpadding=’0’><tr>” & _
“<td valign=’middle’ align=’center’>” & _
“<span id=’theText’ style=’width:100%; height: 180pt; color: #000000;” & _
“font-size: 30pt; font-family: verdana;’>Server shutting down ...&nbsp; “ & _
“<script>” & _
“var from = 1; “ & _
“var to = 22; “ & _
“var delay = 10; “ & _
“var glowColor = ‘FFFF00’; “ & _
“var i = to; “ & _
“var j = 0; “ & _
“textPulseDown(); “ & _
“function textPulseUp() “ & _
“{ “ & _
“ if (!document.all) “ & _
“ return; “ & _
“ if (i < to) “ & _
“ { “ & _
“ theText.style.filter = ‘Glow(Color=’ + glowColor + ‘, Strength=’ + i + ‘)’; “ & _
“ i++; “ & _
“ theTimeout = setTimeout(‘textPulseUp()’,delay); “ & _
“ return 0; “ & _
“ } “ & _
“ if (i = to) “ & _

48 N. 75 - Maggio/Giugno 2007
APPLICATIVI

“ { “ & _
“ theTimeout = setTimeout(‘textPulseDown()’,delay); “ & _
“ return 0;” & _
“ } “ & _
“} “ & _
“ function textPulseDown() “ & _
“ { “ & _
“ if (!document.all) “ & _
“ return ;” & _
“ if (i > from) “ & _
“ { “ & _
“ theText.style.filter = ‘Glow(Color=’ + glowColor + ‘, Strength=’ + i + ‘)’; “ & _
“ i--; “ & _
“ theTimeout = setTimeout(‘textPulseDown()’,delay); “ & _
“ return 0; “ & _
“ } “ & _
“ if (i = from) “ & _
“ { “ & _
“ theTimeout = setTimeout(‘textPulseUp()’,delay); “ & _
“ return 0; “ & _
“ } “ & _
“} “ & _
“</script>” & _
“</td></tr></table>” & _
“</center></div></body></html>”

Dim tcpListener As New TcpListener(localaddr, port)


tcpListener.Start()
Console.WriteLine(“Waiting for connection... on server (“ & ipaddr & “) Port:” & port)
Try
Do
Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
‘tcpclient.ReceiveTimeout = 10000

‘---------------------------------------------------------
‘ Il server è pronto ad accettare le richieste dei clients
‘---------------------------------------------------------

Console.WriteLine(now() & “ Listen for clients .....”)

‘----------------------------------------
‘Il server legge la richietsa del client
‘----------------------------------------

Dim networkStream As NetworkStream = tcpClient.GetStream()

‘ Read the stream into a byte array


Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))

‘ Return the data received from the client to the console.


Dim clientdata As String = Encoding.ASCII.GetString(bytes)
‘Console.WriteLine((“Client sent: “ + clientdata))

‘Dim responseString As String = “”


‘Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
‘networkStream.Write(sendBytes, 0, sendBytes.Length)
‘Console.WriteLine((“Message Sent /> : “ + responseString))
cmd = trim(clientdata)
console.writeline(now() & “ Command “ & mid(cmd,1,80))
‘---------------------------------------------------------------
‘ Shutdown del server
‘ --------------------------------------------------------------
If mid(cmd,1,8) = “shutdown” then

N. 75 - Maggio/Giugno 2007 VBJ 49


APPLICATIVI

Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(msgshut)


networkStream.Write(sendBytes, 0, sendBytes.Length)
tcpClient.Close()
tcpListener.Stop()
Console.WriteLine(now() & “ The server is down”)
Exit do
End if

‘----------------------------------------------------------
‘ Eeecuzione del comando che arriva dal listener locale
‘----------------------------------------------------------

ExecDOScmd(“cmd “,”/c “ & cmd ,strOutput,strError)

‘---------------------------------------------------------------
‘ Gestione degli errori
‘---------------------------------------------------------------

Dim spliterr() as string = Split(strError, textdelimiter)


Errmsg = “ “
If Ubound(spliterr) > 0 then
For k=0 to Ubound(spliterr)
Errmsg = Errmsg & spliterr(k) & vbCRLF
Next

Dim sendBytes As [Byte]() = Encoding.Unicode.GetBytes(Errmsg)


networkStream.Write(sendBytes, 0, sendBytes.Length)
tcpClient.Close()
Else

‘-----------------------------------------------
‘ Questa routine interrompe ogni liea
‘ ed aggiunge il carrier return ed il line feed
‘-----------------------------------------------

Dim splitrow() as string = Split(strOutput, textdelimiter)
rowdispl = “ “
Dim i as integer
For i=0 to Ubound(splitrow)
rowdispl = rowdispl.replace(“<DIR>”,”(DIR)”)
rowdispl = rowdispl & splitrow(i) & vbCrlf
Next
Dim sendBytes As [Byte]() = Encoding.Unicode.GetBytes(rowdispl)
networkStream.Write(sendBytes, 0, sendBytes.Length)
tcpClient.Close()
End if
Loop
Catch e As Exception
‘Console.WriteLine(e.ToString())
Console.ReadLine()
End Try
End Sub


‘ Subroutines

‘-----------------------------------------------------------------
‘ Questa routine esegue I comandi nel server locale e redireziona
‘ la risposta nella variabile strOutput e gli errori in strError
‘-----------------------------------------------------------------

Private Sub ExecDOScmd(ByVal p0 As string,ByVal p1 As string, _
Byref stroutput as string,Byref strError as string)
‘ console.writeline(“p0” & p0 & “ p1 “ & p1)

50 N. 75 - Maggio/Giugno 2007
APPLICATIVI

Dim objProcess As New System.Diagnostics.Process()


objProcess.StartInfo.UseShellExecute = False
objProcess.StartInfo.RedirectStandardOutput = True
objProcess.StartInfo.CreateNoWindow = True
objProcess.StartInfo.RedirectStandardError = True
objProcess.StartInfo.FileName() = p0
objProcess.StartInfo.Arguments() = p1
objProcess.Start()
strOutput = objProcess.StandardOutput.ReadToEnd()
‘ console.writeline(“stroutput “ & stroutput)
strError = objProcess.StandardError.ReadToEnd()
‘ console.writeline(“Strerror “ & strError)
objProcess.WaitForExit()
End Sub
End module

l’utente si connette al listener lo-


cale digitando sulla linea dei co-
mandi del browser il seguente co-
mando:

http://localhost:portnun

(localhost oppure 127.0.0.1 è l’in-


dirizzo di local loopback e port-
num è il valore della porta speci- Figura 1
ficato alla partenza del server.
Apparirà la schermata di Figu-
ra 1. (9.87.230.56:1957 o server1:1957)
Per eseguire il comando sul server remo- dove ipaddress (hostname) e porta si riferi-
to l’utente deve inserire nel campo Sistema scono al listener remoto.
l’ipaddress ed il numero della porta separato Nel campo Comando l’utente scriverà il co-
dal carattere due punti, per esempio: mando, mentre il campo Opzione sarà riem-
Ipaddress:portnum oppure hostname:port pito se il comando ne prevede una.
Nella Tabella 1 sono riportati comandi ed
opzioni di esempio.
Comando Opzione
Il programma srvlocal.vb prevede un con-
Ipconfig trollo dei campi inseriti dall’utente.
Per esempio se l’utente si dimentica di inse-
Ipconfig /all
rire il numero della porta oppure i due pun-
Set ti tra ipaddress e la porta, ne deriva un mes-
saggio di errore (Figura 2).
Dir C:\*.exe Per eseguire la chiusura di entrambi i ser-
ver l’utente deve inserire nel campo Siste-
Netstat -an ma ipaddress:portnum (locale o remoto) e nel
campo Comando deve scrivere shutdown, e il
server (locale o remoto) si chiude.
Tabella 1
Gli utenti che non hanno molta esperienza
trovano nella seconda parte dello schermo di-

N. 75 - Maggio/Giugno 2007 VBJ 51


APPLICATIVI

versi comandi con la rispettiva descrizione. Per eseguire la modifica andare nella sezio-
In questo caso l’utente può copiare il co- ne del codice ‘Codice Javascript che crea il
mando e poi fare il “paste” nella casella Co- form sullo schermo e..’ cambiare le descrizioni
mando. (e comandi) compresi tra i tag HTML <tr> e
Se un utente desidera eseguire un suo pro- </tr> della tabella:
gramma (o script) deve solamente copiarlo nel-
la directory del server remoto e dal browser, “<tr>” & _
digitare il nome nel campo Comando. “<td> Visualizza il contenuto della cache del
Se il computer remoto possiede più di una DNS</td>” & _
scheda di rete allora il listener può essere at- “<td align=’center’><b> ipconfig </td>” & _
tivato su uno qualsiasi degli indirizzi. “<td align=’right’><b> /displaydns </td>” & _
Non dimenticare di chiedere all’amministra- “</tr>”
tore del firewall di attivare una regola che per-
metta la connessione tra il listener locale e L’utility è stata creata in modo tale che l’uten-
quello remoto sulla porta desiderata. te si colleghi attraverso il browser al server
locale che a sua volta si connette ai server re-
Migliorie moti. Questo approccio lascia aperta la strada
per modificare il codice in modo da inserire
Gli utenti più esperti possono cambiare la per esempio la sicurezza basata sul protocol-
descrizione ed il comando corrispondente lo SSL oppure una proprietaria se l’utente ne
intervenendo sul codice del listener locale ha sviluppata una.
srvlocal.vb.

52 N. 75 - Maggio/Giugno 2007
.NET

Utilizzo di Windows
Workflow Foundation
(WWF) Prima puntata
Con il lancio del nuovo Framework 3.0, Microsoft ha presentato una nuova
suite di componenti per i developer, tra cui il Windows Workflow Foundation
(da ora in poi WWF). Il WWF è composto da un modello di linguaggio, un
motore e dei tool per costruire in maniera semplice delle applicazioni
Workflow su Windows

di Fulvio Giaccari

Per quanti non lo sapessero, le applicazioni work- Il WWF è composto da un na-


flow-based non sono altro che una serie di processi mespace, da un motore work-
elementari, chiamate “attività” che sono incluse in flow ed un designer per Visual
un modello che descrive un processo reale. Studio 2005 (Figura 1).
Il workflow provvede a descrivere l’ordine di ese- WWF può essere sviluppato e
cuzione e le relazioni dipendenti tra i vari pezzi di lanciato su un pc con installato
un programma, per esempio come deve viaggiare Windows Vista, Windows XP e
una comunicazione tra il client ed il server. la famiglia Windows 2003 Ser-
ver. WWF include sia il suppor-
to per il workflow di sistemi, sia
Fulvio Giaccari, è Project Manager della Società SB Soft
S.r.l. (Microsoft Gold Certified Partner, www.sbsoft.it). Ulti- per i workflow tra persone (per
mamente si è occupato del porting di moltissime applicazioni esempio come deve viaggiare
Windows Form su piattaforma Framework 3.0, inoltre molte una pratica dalla consegna fino
di queste applicazioni sono “Certified for Windows Vista”.
La società SB Soft si occupa di gestire progetti Office 2003
alla firma per l’accettazione da
e 2007, Sharepoint 2007 e applicazioni Windows Form e parte del dirigente) in una serie
Web per aziende private e per la pubblica amministrazione. di vari scenari, inclusi per esem-
Ha scritto diversi articoli in inglese ed italiano su riviste di
pio il workflow tra applicazioni
settore, sta per pubblicare un libro dedicato interamente ai
VSTO 2005 e 2007 edito da Apress inc. È speaker in moltissimi di business, lo user interface
eventi Microsoft dedicati ad Office. Inoltre è il responsabile page-flow, il document centric
di una Community dedicata ad ASP.NET (www.freeaspx.it) e workflow e tanti altri.
del primo Usergroup Italiano dedicato agli sviluppatori Office
(www.ShareOffice.it)
WWF prevede la possibilità di
sviluppare con tutte le tecnolo-

N. 75 - Maggio/Giugno 2007 VBJ 53


.NET

gie del Framework 3.0, come ad esempio il ci diverse istanze di workflow.


Windows Communication Foundation (WCF) Un modello di workflow può essere compilato
e il Windows Presentation Foundation (WPF), all’interno di un processo Windows incluso in
inoltre prevede come linguaggi per il behind un’applicazione console, in una windows form
code Visual Basic.NET e C#. based o in una Windows Services, in un’appli-
Il tool WWF per Visual Studio 2005 ha il pie- cazione ASP.NET o in un Web Services.
no supporto per il debug, il supporto grafico Proprio perchè l’applicazione WWF è ospitata
per disegnare in modalità visuale il progetto all’interno di un’applicazione, può tranquilla-
di workflow e lo sviluppo del workflow diret- mente comunicare con la stessa.
tamente da codice. Inoltre il WWF prevede la L’immagine di Figura 2 spiega il diagram-
possibilità di creare delle correlazioni tra le ma logico di funzionamento di un’applica-
verie attività di progetti diversi. zione WWF contenuta all’interno di un’ap-
plicazione.
Il motore runtime del Windows Work- In conclusione possiamo dire che il Win-
flow Foundation dows Workflow Engine è il responsabile per
la creazione ed il mantenimento di un’istanza
Ogni singola istanza del workflow è creata e di Workflow. Inoltre, le applicazioni Workflow
mantenuta in un processo comunemente chia- che ospitano al loro interno WWF runtime en-
mato workflow runtime engine. All’interno di gine utilizzano i servizi. I servizi (o services
un dominio dell’applicazione (Domain Appli- in lingua inglese) di base per Windows Work-
cation) ci possono essere più workflow runti- flow Foundation possono essere configurati
me engine, all’interno dell’istanza di ogni sin- per supportare transazioni, persistence, trac-
golo workflow runtime engine possono esser- ciabilità, threading e schedulazioni. Inoltre

Figura 1 Struttura di WWF

54 VBJ N. 75 - Maggio/Giugno 2007


.NET

∙ Creare uno o più processi nel dominio del-


l’applicazione

∙ Prevedere un meccanismo isolato per quei


processi che ne richiedano l’utilizzo

∙ Far partire l’istanza del workflow

∙ Creare servizi personalizzati e locali

Nell’esempio che segue (scritto in C#) ini-


zializza il Windows Workflow Foundation
utilizzando la classe Workflowruntime:

using System;
using System.Threading;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;

class Program
{
static void Main(string[] args)
{
using (WorkflowRuntime workflowRuntime = new
WorkflowRuntime())
{
}
}
}
Figura 2 Diagramma logico di un' applicazione
WWF Nell’intestazione della classe, l’oggetto Work-
flowruntime è inizializzato ed è pronto per
essere utilizzato. Una volta inizializzato l’og-
per applicazioni particolari potrete costruire getto possiamo passare a definire gli eventi
dei vostri servizi personalizzati secondo le vo- del motore runtime del workflow e alla fine
stre esigenze che potrete aggiungere nel mo- creare un’istanza e far partire il processo di
tore runtime del workflow. workflow.
Il motore runtime del workflow gestisce di-
Creare un Host di Workflow versi eventi, questi informano l’applicazione
se il workflow è stato avviato (start) o stoppa-
L’ “host” interagisce con il Windows Workflow to (stopped), inoltre utilizza altri eventi per
Foundation tramite la classe Workflowrunti- gestire il ciclo di vita dell’intero processo di
me o una classe custom che la eredita. Potre- workflow.
ste creare un oggetto Workflowruntime e popo- In questo esempio andremo ad inizializzare
larlo con tutti i servizi (services) che possono un evento per la gestione dello start del pro-
servirvi durante l’esecuzione del workflow. cesso di Workflow.
Potremmo riassumere le responsabilità di un
host in questi brevi punti: workflowRuntime.Started += delegate(object

N. 75 - Maggio/Giugno 2007 VBJ 55


.NET

sender, WorkflowRuntimeEventArgs e) types, il secondo tramite il workflow XAML-


{ BASED.
Console.WriteLine(“WorkflowRuntime started”); Per inizializzare i workflow types chiama-
}; te il metodo CreateWorkflow, passate il
System.Type del workflow e richiamate
Durante l’esecuzione di un processo di work- Start:
flow si possono avere diverse condizioni, per
esempio un’applicazione host può interveni- WorkflowInstance instance = workflowRuntime.
re durante il processo ed invocare il metodo CreateWorkflow
Abort per interrompere l’istanza (solitamen- (typeof(WorkflowNamespace.Workflow1));
te si utilizza il metodo Abort per bloccare instance.Start();
un’istanza di workflow quando il program-
ma host non riesce ad interrompere il work- Per inizializzare un processo di Workflow con
flow in maniera autonoma). l’utilizzo di XAML, richiamate sempre il me-
todo CreateWorkflow passate tramite Xm-
Immaginiamo di voler sapere se il processo lReader la definizione del workflow tramite
di Workflow è concluso oppure è ancora in un file o uno stream e per ultimo chiamate il
esecuzione. Per fare questo possiamo utiliz- metodo Start.
zare l’evento WorkflowTerminated che indica
al programma di host a che punto è il proces- WorkflowInstance instance = workflowRuntime.
so di workflow. CreateWorkflow
Il codice seguente dimostra l’utilizzo di que- (ladefinizionedelfilexaml);
sti eventi: instance.Start();

bool isExceptionfromFaultHandler(System. Di default il processo di workflow viene av-


Workflow.ComponentModel.Activity rootActivity) viato in maniera sincrona dal Workflow Runti-
{ me Engine; per essere sicuri che l’applicazio-
if (rootActivity == null) ne non venga chiusa prima della conclusione
return false; del processo di workflow utilizziamo l’oggetto
if (rootActivity is CompositeActivity) di sincronizzazione del Threading.NET, come
{
if (rootActivity is FaultHandlersActivity)
{ Riquadro 1
if (rootActivity.ExecutionStatus == Activity
ExecutionStatus.Closed) Tecnologie utilizzate:
return true;
- Visual Studio 2005
}
- WWF
- Framework 3.0
foreach (Activity act in ((CompositeActivity)
Obiettivi:
rootActivity).Activities)
if (isExceptionfromFaultHandler(act)) - Capire i concetti fondamentali su WWF
return true;
Software Richiesto:
}
return false; - Windows XP Professional SP2 o Windows Vista Business
- Visual Studio 2005
} - Framework 3.0
- Estensioni WPF per VS 2005

Ci sono due modi per inizializzare un proces-


so di workflow: il primo tramite i workflow

56 VBJ N. 75 - Maggio/Giugno 2007


.NET

per esempio AutoResetEvent. waitHandle.Set();


Nel codice che segue creiamo un processo di };
workflow a runtime e lo avviamo con il me- WorkflowInstance instance = workflowRuntime.
todo Start. Per uscire dall’applicazione host CreateWorkflow (typeof(WorkflowConsoleApplication4.
utilizziamo l’AutoResetEvent quando il l’og- Worklow1));
getto WorkflowRuntime viene rilasciato dal- instance.Start();
l’evento WorkflowCompleted. waitHandle.WaitOne();
}
static void Main(string[] args) }
{
using (WorkflowRuntime workflowRuntime = new Conclusioni
WorkflowRuntime())
{ In questo primo articolo dedicato al Windows
AutoResetEvent waitHandle = new Workflow Foundation (WWF) abbiamo intra-
AutoResetEvent(false); visto tutte le potenzialità derivate da questo
workflowRuntime.WorkflowCompleted += nuovo tool rilasciato con il framework 3.0 di
delegate(object sender, WorkflowCompleted- Microsoft. Nel prossimo articolo analizzeremo
EventArgs e) un esempio specifico in ogni suo dettaglio.
{

N. 75 - Maggio/Giugno 2007 VBJ 57


OFFERTE ABBONAMENTI
Estate 2007
RIVISTE CARTACEE Per l’abbonamento in spedizione con posta prioritaria
1 anno 2 anni aggiungere i seguenti importi:
COMPUTER PROGRAMMING € 55.00 � € 100.00 � durata 1 anno: durata 2 anni:
DEV € 55.00 � € 100.00 �
VISUAL BASIC JOURNAL € 45.00 � € 80.00 � � + € 18.00 per CP � + € 36.00 per CP
LOGIN € 45.00 � € 80.00 � � + € 18.00 per DEV � + € 36.00 per DEV
JAVA JOURNAL € 43.00 � € 75.00 � � + € 10.00 per VBJ � + € 20.00 per VBJ
� + € 10.00 per LOGIN � + € 20.00 per LOGIN
CP+DEV+VBJ+LOGIN+JJ € 196.00 � € 380.00 � � + € 10.00 per JJ � + € 20.00 per JJ

RIVISTE WEB Totale ordine € _______________________


1 anno (IVA 20% INCLUSA)
INDIRIZZO DI SPEDIZIONE
CP web compreso archivio € 45.00 �
DEV web compreso archivio € 45.00 � Nome/Società __________________________________________________________
VBJ web compreso archivio € 35.00 �
Codice Fiscale (obbligatorio) ________________________________________________
LOGIN web compreso archivio € 35.00 �
JJ web compreso archivio € 35.00 � Indirizzo _______________________________________________________________

2 web a scelta compreso archivio € 60.00 � CAP _____________ Città ___________________________________ Prov. ______

3 web a scelta compreso archivio € 85.00 � Telefono ____________________________ Fax ______________________________


4 web a scelta compreso archivio € 115.00 �
5 web compreso archivio € 140.00 � E-Mail ________________________________@_______________________________

Codice Cliente __________________________________________________________


• OFFERTA SPECIALE: Con soli 20€ di differenza avrai
la possibilità di accedere per un intero anno anche alla
versione online (compreso archivio) della rivista a cui
ti sei abbonato INDIRIZZO DI FATTURAZIONE
(solo per riviste web)
RIVISTE CARTACEE + WEB Nome e Cognome _______________________________________________________
1 anno (IVA 20% INCLUSA) Ditta __________________________________________________________________
COMPUTER PROGRAMMING € 75.00 �
Indirizzo _______________________________________________________________
DEV € 75.00 �
VISUAL BASIC JOURNAL € 65.00 � CAP ____________ Città _________________________________ Prov. _________
LOGIN € 65.00 �
P.IVA _________________________________________________________________
JAVA JOURNAL € 63.00 �
E-Mail per invio fattura _________________________ @ ________________________
CP+DEV+VBJ+LOGIN+JJ € 296.00 �

• I prezzi degli abbonamenti Web sono conprensivi dell’ IVA al 20% MODALITA’ DI PAGAMENTO
� Allego fotocopia del Bonifico Bancario effettuato sul C/C 000000014804
• I prezzi degli abbonamenti per l’estero sono maggiorati di spese di spedizione. CAB 25200 ABI 01030 Cin “A” - Monte dei Paschi di Siena - Agenzia di Perignano
� Allego fotocopia della ricevuta del versamento sul C/C Postale N.14291561 intestato
• Gli abbonamenti decorrono dal primo numero raggiungibile.
a: “Gruppo Editoriale Infomedia S.r.l. - Ponsacco”
Per attivazioni retroattive contattaci al numero 0587/736460 o invia una e-mail
all’indirizzo: abbonamenti@gruppoinfomedia.it � Allego assegno bancario intestato a: “Gruppo Editoriale Infomedia S.r.l.” NON TRASFERIBILE
� Contrassegno (+ € 11.00 contributo spese postali)
PRIVACY � Autorizzo l’addebito dell’importo di € _____________________ sulla mia CARTASI’/VISA
Con la presente si autorizza al trattamento dei dati personali ai sensi delle
vigenti norme sulla privacy N. ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___

Scad. ___ ___ / ___ ___ (mm/aa) Codice di sicurezza “CV2” ___ ___ ___
FIRMA________________________________________________
Nome del Titolare ____________________________________________________

SI, mi voglio iscrivere gratuitamente alla newsletter Infomedia Data di nascita ____________________________________________________
che mi tiene aggiornato sui prossimi argomenti delle mie riviste di
programmazione e mi informa delle offerte, le nuove uscite e le prossime Firma del Titolare ____________________________________________________
pubblicazioni. Questo è il mio indirizzo di posta elettronica:
� Collegati al sito www.infomedia.it dove potrai effettuare il pagamento con carta di credito
______________________________@____________________________ in modalità sicura (banca SELLA)

Posso annullare la mia iscrizione in qualsiasi momento alla pagina:


www.infomedia.it/newsletter.htm

Garanzia di riservatezza - Gruppo Editoriale Infomedia garantisce la massima riservatezza dei dati da lei forniti e la possibilità di richiederne gratuitamente la rettifica
o la cancellazione scrivendo a: Responsabile Dati - Gruppo Editoriale Infomedia Srl - Via Valdera P. 116 - 56038 Ponsacco (PI). Le informazioni custodite nel nostro
archivio elettronico verranno trattate in conformità alla legge 196/03 sulla tutela dati personali.
L’IVA sul prezzo dell’abbonamento cartaceo è assolta dall’Editore e non sussiste l’obbligo di emissione della fattura, ai sensi del D.M. 9 aprile 1993, art.1, comma 5;
pertanto, ai fini contabili, farà fede la sola ricevuta di pagamento; perciò la fattura verrà emessa solo se esplicitamente richiesta al momento dell’ordine.
Lei può dedurre il costo dell’abbonamento dal reddito d’impresa e dai redditi derivanti dall’esercizio di arti e professioni (artt. 54 e 56 del TUIR)

GRUPPO EDITORIALE INFOMEDIA S.R.L.


Via Valdera P. 116 - 56038 Ponsacco (PI) - Tel. 0587 736460 - Fax 0587 732232
www.infomedia.it - abbonamenti@gruppoinfomedia.it