WINDOWSXX e DCOM ARCHITETTURA e DLL
Transcript
WINDOWSXX e DCOM ARCHITETTURA e DLL
WINDOWSXX e DCOM ARCHITETTURA e DLL Windows nasce nel 1985 Le prime due versioni sono poco più che prototipi con forti limitazioni: modalità reale 8086 (limite a 640k di memoria) o modalità protetta 80286 E’ un ambiente GUI (Graphical User Interface) costruito intorno al concetto di ILQHVWUD NON SOLO un semplice elemento grafico Windows 3.0 esce nel 1991 e sfrutta le capacità dei processori di classe 386 Con le prime applicazioni commerciali di buon livello. )DPLJOLDGLDPELHQWLLQGLFDWLGLVROLWRFRPH:LQ;; Windows 3.x (16 bit), Windows 95/98 (ibrido 16/32), Windows NT (32 bit) e Windows CE (32bit per palmari ed embedded). :LQGRZV ambiente ibrido in cui convivono parti a 16 e parti a 32 bit, orientato a fornire la massima compatibilità con il DOS, con problemi intrinseci di fragilità. :LQGRZV 17 per uso professionale con architettura microkernel 32bit molto robusta (anche un sottosistema Posix compliant) La release corrente 4.0 ed esiste in due versioni: server e workstation 6WUXWWXUDPRGXODUH il sistema operativo è formato da una collezione di librerie ad aggancio dinamico '// le DLL costituiscono la $3, Application Program Interface $3, • Win16 (per i sistemi a 16 bit) • Win32 (per i sistemi a 32 bit). Il cuore dell’API è formato da 3 DLL: • .HUQHO: memory manager, scheduler, loader • 8VHU: sistema di windowing • *',: Graphics Device Interface (VWHQVLELOLWj ottenuta aggiungendo nuove DLL per esempio WinSocket per TCP/IP :LQGRZVcon nuoveGLUH]LRQL A. Corradi, GII 2000, DCOM , 1 A. Corradi, GII 2000, DCOM , 2 Modello pseudo-multitasking ARCHITETTURA AD EVENTI chiamato “co-operative multitasking”. Architettura JXLGDWDGDHYHQWL callback “Don’t call me I call you” (+ROO\ZRRG0RGHO) impostazione comune a tutti gli ambienti a GUI Win16 Í (YHQWR ogni azione dell’utente (mouse tastiera) e ogni interazione con una periferica (arrivo di un carattere sulla porta seriale o su un socket) 2JQLHYHQWRSURYRFDO¶LQYLRGLXQ PHVVDJJLRDG XQDRSLDSSOLFD]LRQL Win16 una coda unica per tutte le applicazioni Win32 una coda per ogni applicazione 0HVVDJJL come base della comunicazione fra applicazioni e fra finestre di un’applicazione In Windows una ILQHVWUD è XQ¶HQWLWj in grado di ULFHYHUH e HODERUDUHmessaggi. L’applicazione passa un un FRGLFH GL JHVWLRQH (puntatore ad una sua funzione) alla DLL 0HFFDQLVPR GL FDOOEDFN consente ad una DLL della API di chiamare una funzione della applicazione Per la implementazione del sistema di mesaggi/eventi Ogni finestra ha una funzione di FDOOEDFN (Window Procedure o WndProc) usata dalle DLL di sistema per inviarle i messaggi A. Corradi, GII 2000, DCOM , 3 un solo processo e flusso operativo sequenziale Il dispatching dei messaggi simula la concorrenza. Se un’applicazione entra in un loop nella risposta ad un messaggio, il sistema rimane bloccato Win32 Í multitasking effettivo (preemptive) ogni applicazione è un processo e ha una propria coda di messaggi Uno scheduler assegna una “fetta” di tempo ai processi attivi in base alla priorità Ogni processo può avere più threads (processi “leggeri” con memoria condivisa). Inoltre, WXWWHOHHQWLWj oggetti XWHQWH e oggetti di NHUQHO Ciascuno con KDQGOH per nomimarli e IXQ]LRQL di uso La capacità di esecuzione è attribuita ai processi leggeri (thread) che agiscono nell’ambito di un processo pesante che li racchiude A. Corradi, GII 2000, DCOM , 4 &RPXQLFDUHFRQLFRPSRQHQWL ,QWHUIDFFH COM e DCOM Component Object Model (1992) modello di LQWHUD]LRQHIUDSURFHVVL, basato su FRPSRQHQWL e FRPXQLFD]LRQHFOLHQWVHUYHU sincrono COM è un insieme di VSHFLILFKH supportato da VHUYL]L GL VLVWHPD (supporto runtime) supporto runtime è una DLL di sistema per i servizi necessari nell’accesso ai componenti Le specifiche definiscono lo standard (Microsoft) per la creazione di componenti in grado di interagire fra loro ,QPRGRLQGLSHQGHQWH GDOOLQJXDJJLRGLSURJUDPPD]LRQHH GDOOHDSSOLFD]LRQLFKHOLXWLOL]]DQR Il modello prevede un funzionamento locale e distribuito '&20'LVWULEXWHGComponent Object Model COM si basa su un VLVWHPDGLQRPLper i componenti XWLOL]]DQGRLGHQWLILFDWRULJOREDOL GUID=globally unique identifiers un oggetto &20 identificato univocamente da un GUID espone una o più LQWHUIDFFH Un’interfaccia è l’insieme di tutte e sole le IXQ]LRQL (PHWRGL) che permettono di interagire con l’oggetto che la espone &20FUHDWRSHU& LO PHFFDQLVPR GHOOH LQWHUIDFFH QDVFH GDOOD WHFQLFD XVDWDSHURJJHWWLGHILQLWLHLVWDQ]LDWLLQ'// Implementativamente interfaccia come un SXQWDWRUH ad una porzione della “YLUWXDOPHWKRGWDEOH” (YWDEOHR907) di un oggetto La VMT è una tabella di puntatori a funzione &RQ XQD WHUPLQRORJLD ³-DYD´ XQ RJJHWWR &20 LPSOHPHQWDXQFHUWRQXPHURGLLQWHUIDFFH Ad esempio ^EEEEFIDEEFEG` GUID intero di 128 bit (16 byte) assegnato per garantire l’unicità nello spazio (48 bit) e nel tempo (60 bit). le interfacce sono identificate da *8,' chiamati ,,' (Interface Identifiers) 3HU FRQYHQ]LRQH L QRPL GHOOH LQWHUIDFFH LQL]LDQR FRQODOHWWHUD, GUID introdotto dalla Open Software Foundation come UUID='universally unique id' nelle RPC di DCE (Distributed computing environment) Un Oggetto COM deve interfaccia generalissima ,XQNQRZQ A. Corradi, GII 2000, DCOM , 5 esporre almeno una A. Corradi, GII 2000, DCOM , 6 ,QWHUIDFFHGLEDVH ,8QNQRZQ è una sorta di punto di ingresso per accedere a tutte le altre interfacce esposte dall’oggetto Un oggetto COM si identifica con la sua ,XQNQRZQ con ,,' ’{00000000-0000-0000-C000-000000000046}’ ,8QNQRZQ comprende 3 metodi 4XHU\,QWHUIDFH$GG5HIH5HOHDVH $GG5HIH5HOHDVH per “reference counting” 4XHU\,QWHUIDFH permette di accedere alle altre interfacce esposte dall’oggetto chiedendo all’oggetto se implementa una determinata interfaccia con parametro IID In caso positivo il parametro Obj contiene un riferimento all’interfaccia richiesta function 4XHU\,QWHUIDFH(const IID:TGUID; out Obj):HRESULT; HRESULT intero che dice se l’interfaccia richiesta è disponibile (S_OK) oppure no (E_NOINTERFACE) ,QWHUIDFFLD 2JJHWWR Il famigerato 5HJLVWU\ è il sistema di QRPLORFDOH che registra tutti i GUID dei server delle applicazioni locali A. Corradi, GII 2000, DCOM , 7 (UHGLWDULHWjHDJJUHJD]LRQH COM supporta HUHGLWDULHWj delle interfacce QRQ delle implementazioni. (UHGLWDULHWjGHOOHLQWHUIDFFH Interfacce COM discendono da ,8QNQRZQ tutte le VMT corrispondenti hanno nei primi 3 slot i metodi 4XHU\,QWHUIDFH$GG5HIH5HOHDVH L’ereditarietà delle interfacce è usata limitatamente: tutte le interfacce discendono da ,8QNQRZQ o da ,'LVSDWFK (che discende da ,8QNQRZQ) COM vede l’ereditarietà come un accoppiamento troppo stretto fra gli oggetti HUHGLWDULHWj è vista come una pericolosa breccia nell’incapsulamento una classe derivata può accedere allo stato interno della classe base COM propone un meccanismo di riuso detto aggregazione (o delegazione) Í un oggetto espone anche le interfacce di un altro oggetto (aggregato) 0ROWRPHQRHOHJDQWHHSLFRPSOHVVDGHOO¶HUHGLWDULHWj SRFRSLGLXQDVSHFLILFDGLLPSOHPHQWD]LRQH A. Corradi, GII 2000, DCOM , 8 IMPLEMENTAZIONE DI COM IN-PROCESS SERVER Oggetti COM e server Indipendenza dalla collocazione fisica: l’applicazione che usa un oggetto COM (client) non sa dove risiede effettivamente l’oggetto 5DSSUHVHQWD]LRQHVHPSOLILFDWD GL,17(5)$&&,$ ,QWHUIDFFLD 2JJHWWR Server: entità in cui risiede un oggetto COM Tre tipi di server ,QSURFHVVVHUYHU: all’interno dello stesso spazio del processo utente, in una DLL /RFDO VHUYHU: fuori dal processo ma nella stessa macchina (in un EXE) 5HPRWH VHUYHU: in un altra macchina: DCOM (Distributed COM) I server locali e remoti vengono detti “out-of-process”. Server in-process DLL che esporta 4 funzioni standard: 'OO*HW&ODVV2EMHFW, 'OO&DQ8QORDG1RZ, 'OO5HJLVWHU6HUYHU, 'OO8QUHJLVWHU6HUYHU L’applicazione client richiede un oggetto al supporto runtime (COMPOBJ) sulla base di un GUID COMPOBJ cerca nella UHJLVWU\ il nome della DLL associata al GUID e la carica in memoria Chiama una funzione della DLL e ottiene l’interfaccia ,&ODVV)DFWRU\ (vtable di un oggetto ClassFactory) Chiede a ClassFactory di instanziare l’oggetto richiesto e di restituirne l’interfaccia ,8QNQRZQ (IFClassFactory.CreateInstance) L’interfaccia viene passata al client che invoca i metodi dell’oggetto nella DLL Client 2JJHWWR:LQGRZV $SSOLFD]LRQH&OLHQW &DQDOH ,QWHUIDFFLD$ Puntatore all’interfaccia A Puntatore alla funzione 1 Puntatore alla funzione 2 Puntatore alla funzione 3 Puntatore alla funzione 4 Puntatore alla funzione 5 Proxy Stub Implementazione delle funzioni di A A. Corradi, GII 2000, DCOM Oggetto , 9 A. Corradi, GII 2000, DCOM , 10 COM e DCOM MIDL Si noti che la stessa interazione consente di muoversi • Tra applicazioni della stessa macchina • Tra processi della stessa applicazione • Tra processi di macchine diverse DCOM Le interfacce vengono descritte con un linguaggio apposito IDL (MIDL) Il compilatore MIDL genera automaticamente la coppia SUR[\VWXE a partire da una di queste descrizioni MIDL è un linguaggio con una sintassi simile a quella del C ed è compatibile con lo standard '&(,'/ (Interface Definition Language) MIDL = Microsoft Interface Definition Language Incorpora un meccanismo precedente (ODL=Object Definition Language) che forniva una soluzione parziale legata ad 2/( Automation 2EMHFW/LQNLQJ(PEHGGLQJ (tecnologia precedente di windows) 6&0 (Service Control Manager) se il VHUYHUUHPRWR A. Corradi, GII 2000, DCOM , 11 A. Corradi, GII 2000, DCOM , 12 LE TECNOLOGIE ACTIVEX DOCUMENTI COMPOSTI (OLE) Sulla base della tecnologia '&20 la Microsoft ha cominciato a sviluppare tutta la propria tecnologia di applicazione Cercando di intervenire nei FRPLWDWL GL VWDQGDUG e di imporre proprie scelte &RPSRXQGGRFXPHQWV Linking Embedding In-place Activation 8QLIRUP'DWD 7UDQVIHU 6WUXFWXUHG6WRUDJH &RQWUROV OCX - ActiveX $XWRPDWLRQ 'LVS,QWHUIDFHV 2/( 7UDQVDFWLRQV 2/('% ,QWHJUD]LRQH GL FRPSRQHQWL SURYHQLHQWL GD IRQWL GLYHUVHDOO¶LQWHUQRGLXQGRFXPHQWRFRPSRVWR &RQWDLQHU: applicazione che gestisce il documenti 6HUYHU: applicazioni specializzate che gestiscono i componenti (PEHGGLQJ: il componente viene incorporato nel documento /LQNLQJ: il documento contiene solo un riferimento al componente ,QSODFHDFWLYDWLRQ: l’applicazione server si attiva nello spazio visivo (finestra) del container OLE è la tecnologia con cui si attiva in una applicazione un’altra ,QXQGRFXPHQWRZRUGXQDWDEHOODH[FHO /D WDEHOOD FRQWLQXD D ULIHULUH LO SURSULR JHVWRUH H OR DWWLYDVHQHFHVVDULR Problemi di GXSOLFD]LRQH o ULIHULPHQWL allo stesso oggetto &20 STRUCTURED STORAGE XQLQWHURILOHV\VWHPDOO¶LQWHUQRGLXQVLQJRORILOH • Gestione di concorrenza e diritti di accesso • Gestione delle transazioni Base per il futuro file system ad oggetti (OFS) di Cairo A. Corradi, GII 2000, DCOM , 13 A. Corradi, GII 2000, DCOM , 14 UNIFORM DATA TRANSFER Unifica i sistemi di scambio dati fra processi: FOLSERDUGGUDJDQGGURS''( LQGLSHQGHQWHPHQWH GDO PH]]R ILVLFR XVDWR SHU OR VFDPELRPHPRULDILOHSURWRFROOLGLUHWH Lo scambio avviene mediante un oggetto COM detto 'DWD2EMHFW Il protocollo è costituito da una serie di funzioni API che hanno il compito di scambiare un Data Object fra due processi AUTOMATION &RQVHQWH DG XQ¶DSSOLFD]LRQH (controller o client) GL FRPDQGDUH GDOO¶HVWHUQR XQ¶DOWUD DSSOLFD]LRQH (server) (¶ XQ PHWRGR GL VFULSWLQJ JHQHUDOL]]DWR LQGLSHQGHQWHGDOOLQJXDJJLR Consente di incapsulare e riutilizzare applicazioni legacy Fornisce un metodo semplificato per creare interfacce non standard senza ricorrere a proxy/stub Tecnologia raccomandata con DCOM 5HPRWHDXWRPDWLRQ A. Corradi, GII 2000, DCOM , 15 AUTOMATION: INTERFACCIA UNIVERSALE Automation nasce dalla necessità di fornire un metodo generale per accedere a COM mediante linguaggi di scripting e linguaggi interpretati in generale Necessità di 9LVXDO%DVLF per ovviare alla necessità di creare un ZUDSSHU GLYHUVR per ogni interfaccia esportata da COM ,QWHUIDFFLD VWDQGDUG universale alternativo alle YWDEOHV per invocare i metodi esposti da un oggetto COM ,Q SUDWLFD VL ULHVFRQR D GHILQLUH LQWHUIDFFH SHUVRQDOL]]DWH VHQ]D ULFRUUHUH D 0,'/ SHU FUHDUH FRSSLHSUR[\VWXEVSHFLDOL]]DWH Un’interfaccia basata su Automation è “automarshalled”, in quanto la DLL di sistema ROHDXWGOO funziona da SUR[\VWXEXQLYHUVDOH per tutti i server di automation Automation fornisce un meccanismo completamente dinamico per consentiree ad un client (controller) di “esplorare” e utilizzare a runtime un’interfaccia sconosciuta A. Corradi, GII 2000, DCOM , 16 IDISPATCH E DISPINTERFACES DISPATCHING AUTOMATICO Alla base di tutto c’è l’interfaccia IDispatch: ,OPHFFDQLVPRLQVLQWHVL type,'LVSDWFK interface,8QNQRZQ >µ^F`¶@ Grazie a IDispatch un interprete è in grado di operare agevolmente su un oggetto sconosciuto, di cui è noto solo il nome. function *HW7\SH,QIR&RXQW (out Count:Integer):Integer; stdcall; function *HW7\SH,QIR (Index,LocaleID:Integer;out TypeInfo): Integer; stdcall; function*HW,'V2I1DPHVconst ,,'7*8,' Names:Pointer; NameCount, LocaleID:Integer; DispIDs:Pointer): Integer; stdcall; function ,QYRNH'LVS,',QWHJHU const IID:TGUID;LocaleID:Integer, Flags:Word;var Params;VarResult, ExceptInfo, ArgErr:Pointer):Integer; stdcall; end $FFHVVRDOO¶RJJHWWR Passando il nome a COMPOBJ si ricava il CLSID Utilizzando il CLSID si ottiene l’interfaccia ,8QNQRZQ Con IUnknown.QueryInterface si ottiene l’interfaccia ,GLVSDWFK (VSORUD]LRQH IDispatch.GetTypeInfo restituisce l’interfaccia ,7\SH,QIR che fornisce informazioni sui metodi della GLVSLQWHUIDFH: nomi, elenco dei parametri e tipo dei valori di ritorno. ,'LVSDWFKGLVFHQGHGD,8QNQRZQ L’insieme dei metodi accessibili GLQDPLFDPHQWH tramite ,'LVSDWFK prende il nome di GLVSLQWHUIDFH *HW7\SH,QIR&RXQWH*HW7\SH,QIR informazioni sui metodi esportati dall’interfaccia (esplorazione) *HW,'V2I1DPHVH,QYRNH meccanismo di chiamata dinamica o dispatching (utilizzo) A. Corradi, GII 2000, DCOM , 17 &KLDPDWD IDispatch.GetIDsOfNames prende il nome di un metodo e restituisce il suo ID (DispID) IDispatch.Invoke è in grado di invocare il metodo voluto in base all’ID Params è un buffer che contiene i parametri (il cui tipo è noto grazie a GetTypeInfo) VarResult contiene il valore restituito dal metodo invocato A. Corradi, GII 2000, DCOM , 18 COMPONENTI MODELLI DISPONIBILI e PIÙ DIFFUSI ■ ■ ■ COMPONENTI ACTIVEX VBX: (Microsoft) legati al Visual Basic, hanno decretato il successo di questa teconologia (solo 16 bit), stanno cadendo in disuso VCL: legati agli ambienti Borland (Delphi, C++ Builder), (16/32 bit) - object oriented JavaBeans: componenti di Java, nascono dalla collaborazione tra Sun e Borland e derivano dall’esperienza VCL - object-oriented ■ • I componenti ActiveX sono basati su COM • costituiscono in qualche modo il “riassunto” delle tecnologie basate su questo modello • Si avvalgono della tecnologia dei documenti composti (OLE Documents) per realizzare l’in-place activation e la serializzazione • Utilizzano Automation per implementare proprietà, eventi e metodi (modello PEM) e le capacità di introspezione Sono implementati come server in-process (DLL) Inizialmente venivano chiamati 2/( &2QWUROV, poi 2&; e infine $FWLYH;&RPSRQHQWV FRPSOHVVLGDUHDOL]]DUHQRQYHQJRQRPDLUHDOL]]DWL PDQXDOPHQWH PD DWWUDYHUVR VWUXPHQWL PHVVL D GLVSRVL]LRQHGDJOLDPELHQWLGLVYLOXSSR:L]DUGV OCX/ActiveX: basati su COM, indipendenti dal &RPSRXQGGRFXPHQWV Linking Embedding In-place Activation linguaggio (16/32 bit) - object-based 8QLIRUP'DWD 7UDQVIHU 6WUXFWXUHG6WRUDJH &RQWUROV OCX - ActiveX 2/( 7UDQVDFWLRQV $XWRPDWLRQ 'LVS,QWHUIDFHV 2/('% &20 A. Corradi, GII 2000, DCOM , 19 A. Corradi, GII 2000, DCOM , 20 IN-PLACE ACTIVATION SERIALIZZAZIONE I componenti ActiveX sono in pratica server OLE in miniatura che implementano quasi tutte le interfacce OLE Documents: • IOLEObject • IOLECache • IOLECache2 • IOLEInPlaceActiveObject • IDataObject (per Drag and Drop) diversamente dai normali server OLE (Excel dentro Word) che funzionano in modalità RXWVLGHLQ gli ActiveX funzionano in modalità LQVLGHRXW Outside-in: un oggetto Excel incorporato in un documento Word è normalmente inattivo e viene visualizzata una sua immagine statica (in formato metafile) 6ROR quando facciamo doppio click sull’immagine viene caricato Excel e l’oggetto diventa attivo Inside-out: i controlli ActiveX sono invece sempre “attivi” e la DLL rimane caricata per tutto il tempo di vita del form in cui il controllo è stato incorporato. Non esiste un’immagine statica Si utilizza lo stesso meccanismo che permette, ad esempio, il salvataggio dell’oggetto Excel nel documento Word Il componente implementa l’interfaccia ,3HUVLVW6WRUDJH ,3HUVLVW6WRUDJH = interface(,3HUVLVW) [’{0000010A-0000-0000-C000000000000046}’] function ,V'LUW\: HResult; stdcall; function ,QLW1HZ(const stg: IStorage): HResult; stdcall; function /RDG(const stg: IStorage): HResult; stdcall; function 6DYH(const stgSave: IStorage; fSameAsLoad: BOOL): HResult; stdcall; function 6DYH&RPSOHWHG(const stgNew: IStorage): HResult; stdcall; function +DQGV2II6WRUDJH: HResult; stdcall; end; Il container chiama i metodi 6DYH e /RDG passando un’interfaccia ,VWRUDJH Il componente salva o carica il proprio stato in questo storage 67$7,&2YV',1$0,&2 A. Corradi, GII 2000, DCOM Anche il meccanismo di serializzazione deriva da OLE ed è basato sulla tecnologia “structured storage” , 21 A. Corradi, GII 2000, DCOM , 22 MODELLO PEM E INTROSPEZIONE EVENTI Un componente software come componente hardware Tre tipi di piedini: proprietà, metodi, eventi ◆ 3URSULHWj (property): “piedini di stato”, pseudovariabili che consentono di agire in modo protetto sullo stato interno ◆ 0HWRGL: “piedini di ingresso”, comandi che provocano l’esecuzione di azioni ◆ (YHQWL: “piedini di uscita”, provocano l’esecuzione di metodi nel container (callback) in seguito a qualcosa che si verifica nel componente Un’applicazione in grado di incorporare componenti viene definita FRQWDLQHU l’equivalente software di una scheda elettronica Implementazione degli eventi basata su Automation con meccanismi un po’ più complessi Automation fornisce la tecnologia per implementare sia i “piedini” del nostro FLUFXLWR LQWHJUDWR VRIWZDUH, sia l’LQWURVSH]LRQH L’LQWURVSH]LRQH realizzata dalle W\SH OLEUDULHV per un completo meccanismo di esplorazione delle capacità di un oggetto COM Le proprietà e i metodi vengono implementate sotto forma di un’interfaccia ,'LVSDWFK del componente le proprietà sono coppie di metodi (accessors) per lettura (get) e scrittura (set) delleproprietà Il container mette a disposizione una interfaccia ,'LVSDWFK per le variabili di ambiente A. Corradi, GII 2000, DCOM , 23 Il FRPSRQHQWH definisce nella sua type library l’elenco degli eventi che è in grado di innescare sotto forma di GLVSLQWHUIDFHche non implementa Il FRQWDLQHU legge dalla type library la definizione della GLVSLQWHUIDFH e provvede a fornire l’implementazione A runtime il componente richiede questa interfaccia e la utilizza ogniqualvolta si renda necessario innescare un evento In gergo COM si dice che il FRPSRQHQWH fa da VRXUFH (sorgente) per la GLVSLQWHUIDFH (in pratica la definisce) e il FRQWDLQHU fa da VLQN (pozzo) (in pratica la implementa) ,O FRQWDLQHU QRQ FRPXQLFD GLUHWWDPHQWH FRQ LO FRPSRQHQWH PD DWWUDYHUVR RJJHWWL LQWHUPHGL GHILQLWL ³FRQQHFWLRQ SRLQWV´ H GHYH SUHGLVSRUUH XQ DOWUR RJJHWWRLQWHUPHGLRGHWWR³FOLHQWVLWH´SHURJQLFRQWUROOR LQFRUSRUDWR A. Corradi, GII 2000, DCOM , 24 DCOM e TECNOLOGIE WEB AUTOMATION e SCRIPTING &20 rappresenta la base di tutte le tecnologie Microsoft in ambito Intranet ed Internet (Web) La tecnologia $XWRPDWLRQ costituisce uno strumento ideale per realizzare sistemi di scripting estensibili Tre grandi aree: un interprete può accedere facilmente ad oggetti che implementano l’interfaccia ,GLVSDWFK • $FWLYHVFULSWLQJ La possibilità di fare degli script che vadano oltre gli schemi statici (html) • 6WUXPHQWLFOLHQWVLGH,QWHUQHWH[SORUHU Strumenti dalla parte del cliente che in genere sono compatibili solo con Microsoft browser • 6WUXPHQWLVHUYHUVLGH,,6H$63 Strumenti dalla parte del server che in genere sono compatibili solo con Microsoft server 7XWWL L OLQJXDJJL GL VFULSW SL GLIIXVL VRQR EDVDWL VX PRGHOOLDGRJJHWWL -DYDVFULSW9%6FULSW9%$3\WKRQ3HUOHFF quindi si possono adattare bene al modello COM Gli oggetti possiedono le due caratteristiche di base per essere comandati da uno script-engine: • Introspezione (type libraries): l’interprete è in grado di ricavare tutte le informazioni necessarie riguardo ai metodi esposti e ai parametri necessari • Very-late binding (dispatching): l’interprete è in grado di invocare dinamicamente i vari metodi utilizzando IDispatch.Invoke A. Corradi, GII 2000, DCOM , 25 A. Corradi, GII 2000, DCOM , 26 ACTIVE SCRIPTING CONCETTI DI BASE ACTIVE SCRIPTING La tecnologia $FWLYH6FULSWLQJ rappresenta un modo VWDQGDUG per consentire ad un’applicazione di utilizzare un PRWRUH GL VFULSWLQJ per automatizzare alcune funzioni si basa su una collezione di interfacce COM Una parte implementata dall’DSSOLFD]LRQH e una parte dallo VFULSWHQJLQH SCHEMA GENERALE Si notino i ruoli separati e precisi della applicazione e dello script engine Applicazione Gli VFULSW HQJLQH che supportano questo modello sono intercambiabili fra di loro Scripting Engine (DLL) IActiveScript IActiveScriptParse Oltre ai due motori forniti dalla Microsoft 9%6FULSWH-6FULSW ne sono già disponibili altri, prodotti da terze parti: per esempio PythonWin è un implementazione freeware del motore di scripting per Python Oggetti COM IActiveScriptError IActiveScriptSite Scripting Host IActiveScriptSiteWindow Netta indipendenza fra la capacità di un applicazione di essere “automatizzata” e il motore di scripting che utilizza questa capacità Il vincolo è l’aderenza al modello $FWLYH6FULSWLQJ A. Corradi, GII 2000, DCOM , 27 A. Corradi, GII 2000, DCOM , 28 ACTIVE SCRIPTING FUNZIONAMENTO FUNZIONAMENTO APPLICAZIONE Lo VFULSW HQJLQH è un oggetto COM registrato nel sistema L’applicazione lo attiva con &R&UHDWH2EMHFW e ottenere (con 4XHU\,QWHUIDFH) le sue due interfacce principali ,$FWLYH6FULSW comprende metodi per - attivare e disattivare l’engine - passare al motore l’interfaccia ,$FWLYH6FULSW6LWH implementata dall’applicazione - indicare i nomi degli oggetti COM Automation esposti dall’applicazione - controllare il thread che esegue uno script ,$FWLYH6FULSW3DUVH consente invece di attivare uno script passato sotto forma di stream di testo Tutte le subroutine contenute nello script vengono esposte come metodi di una GLVSLQWHUIDFH e quindi possono essere invocati ,$FWLYH6FULSW(UURU viene passata all’applicazione quando si verifica un errore e consente di ricevere informazioni sul tipo di errore, la sua posizione ecc. A. Corradi, GII 2000, DCOM , 29 L’applicazione espone un’interfaccia IActiveScriptSite che funziona da “callback” L’applicazione deve creare una classe COM $XWRPDWLRQ per ogni oggetto interno che vuole esporre I nomi di queste classi vengono registrate nell’engine attraverso ,$FWLYH6FULSW$GG1DPHG,WHP Quando l’engine incontra nello script un’istruzione del tipo CreateObject(“ClassName”) chiama IActiveScriptSite.GetItemInfo per istanziare nell’applicazione l’oggetto opportuno GetItemInfo restituisce l’interfaccia ,8QNQRZQ dell’oggetto in questione e quindi - tramite 4XHU\,QWHUIDFH - l’interfaccia ,'LVSDWFK Ogni volta che l’engine incontra un’istruzione del tipo &ODVV1DPH'R6RPHWKLQJ utilizza ,'LVSDWFK per invocare il metodo La seconda interfaccia esposta dall’applicazione verso l’engine - ,$FWLYH6FULSW6LWH:LQGRZ- permette all’engine di ricavare l’handle della finestra da usare come parent per le finestre eventualmente aperte dallo script A. Corradi, GII 2000, DCOM , 30 CLIENT-SIDE INTERNET EXPLORER E DHTML STRUTTURA DI IE iexplore.exe La strategia Microsoft sul lato client delle applicazioni Web si basa su - EURZVHU,QWHUQHW([SORUHU e - '+70/ ,QWHUQHW ([SORUHU ha una struttura a componenti e rappresenta l’esempio più completo ed interessante di applicazione delle tecnologie basate su COM '+70/ è una versione dinamica di HTML, proposta dalla Microsoft, che è stata recentemente accettata come base per lo standard DHTML dal W3C consortium DHTML si basa su un modello ad oggetti denominato '20 (Document Object Model) che può essere manipolato mediante interfacce COM iexplore.exe showdocvw.dll (ActiveX che funge da Active Document Container) Active Scripting Engine mshtml.dll (Active Document Server per HTML e DHTML) DOM Active Scripting Engine Componenti ActiveX incorporati nelle pagine JVM IEXPLORE.EXE è un FRQWHQLWRUH che funziona da $FWLYH;FRQWDLQHU e JHVWLVFHPHQXHWRROEDU Il motore di Internet Explorer è un componente ActiveX contenuto nella '// SHOWDOCVW.DLL, che consente • la navigazione e • la visualizzatore universale di documenti mshtml.dll (Active Document Server per HTML e DHTML) DOM showdocvw.dll (ActiveX che funge da Active Document Container) Componenti ActiveX incorporati nelle pagine JVM A. Corradi, GII 2000, DCOM , 31 A. Corradi, GII 2000, DCOM , 32 SHOWDOCVW IE: ACTIVEX e WEB Questo componente può ospitare, e visualizzare, qualunque tipo di documento per cui sia disponibile un VHUYHU$FWLYH'RFXPHQW Il componente ha il compito di collegarsi ad ogni possibile gestore 6+2:'2&9:'// permette di creare applicazioni che incorporano funzionalità di navigazione Web Internet Explorer consente di incorporare componenti ActiveX all’interno delle pagine HTML mediante una sintassi tipo: 6+2:'2&9:'// è - sia un componente ActiveX - sia un container Active Documents <OBJECT ID=“ClassName” WIDTH=300 HEIGHT=32 CLASSID= ³&/6,''&(&'$'&´! <PARAM NAME=“Size” VALUE=“2540;846” <PARAM NAME=“FontCharSet” VALUE=“0” ... </OBJECT> 06+70/'// è il server specializzato nella gestione di documenti HTML e DHTML Questi componenti si comportano in pratica in modo molto simile alle DSSOHW-DYD MSHTML espone un’interfaccia che consente di accedere al 'RFXPHQW 2EMHFW 0RGHO contenuto al suo interno e quindi di pilotare le pagine dinamiche di DHTML A. Corradi, GII 2000, DCOM , 33 Sono file binari • non sono interpiattaforma e • presentano problemi di sicurezza Dopo l’enfasi iniziale, sono stati abbandonati a favore di '+70/ A. Corradi, GII 2000, DCOM , 34 IE: SCRIPTING SERVER-SIDE: IIS, ISAPI e ASP Internet Explorer ottiene capacità mediante la tecnologia Active Scripting di scripting I vari componenti dell’explorer espongono una serie di oggetti Automation che costituiscono l’object model su cui -6FULSW (la versione Microsoft di JavaScript) e 9%6FULSW possono operare Window La strategia Microsoft VXO ODWR VHUYHU è implementata dal server Web di NT ,QWHUQHW,QIRUPDWLRQ6HUYHU,,6 IIS prevede un’API denominata ,6$3, per estenderne le funzionalità mediante DLL Tutte le DLL ISAPI sono comparabili alle applicazioni &*, ma più efficienti perché non richiedono l’attivazione di un nuovo processo ad ogni richiesta di esecuzione Frame History Location Il fatto che le estensioni ISAPI risiedono nello stesso spazio di processo del Web Server è un HOHPHQWRGLIUDJLOLWj: un errore all’interno della DLL è in grado di mandare in crash il server Navigator Script Document Form Link Form elements $63 (Active Server Pages) rappresenta la tecnologia server (666 Server Side Scripting) Microsoft Anchor Oltre agli oggetti tradizionali legati ad HTML, gli script possono operare anche sugli oggetti DOM per gestire le pagine dinamiche A. Corradi, GII 2000, DCOM , 35 Le DFWLYHVHUYHUSDJHV sono pagine che contengono sia parti +70/ sia parti di VFULSW (VBScript, JScript o altro) Gli script vengono eseguiti dal motore ASP sul lato server e al browser arrivano pagine HTML “pulite” ,OPRWRUH$63qUHDOL]]DWRVRWWRIRUPDGLHVWHQVLRQH ,6$3,$63'// A. Corradi, GII 2000, DCOM , 36 ASP: SCHEMA GENERALE ,,6 :HE6HUYHU Oggetto Automation IDispatch Interfaccia ISAPI $63(QJLQH Request Response Server ASP e HTML In una pagina ASP abbiamo elementi di HTML inframmezzati da script Gli elementi HTML vengono passati direttamente al web server mentre le parti di script vengono interpretate utilizzando un motore di scipting di tipo Active Scripting (VBScript, JeScript, Python o altro) IScriptingContext Oggetto Automation Session IDispatch Application ASP: principi di funzionamento Quando il Web server riceve un URL del tipo: ZZZP\VHUYHUFRPDSDJHDVS"SDUSDUSDU Active Scripting Engine Pagine ASP passa la pagina apage.asp al motore ASP Il server IIS è fortemente integrato con ASP engine che è in grado di interagire con le parti scritte in ASP e che deve produrre pagine HTNL anche attraverso la interazione con oggetti automation locali Le righe di script sono identificate dai tag H! Se uno script inizia con il risultato della valutazione viene inserito all’interno della pagina HTML al posto dello script stesso Per esempio la sequenza <H3> Ultima visita <%= Request.Cookies(“LastVisit”)> </H3> viene tradotta e passata al web server così: <H3>Ultima visita 10/5/1999<H3> A. Corradi, GII 2000, DCOM , 37 A. Corradi, GII 2000, DCOM , 38 ASP: OGGETTI e REQUEST ASP: OGGETTO RESPONSE ASP mette a disposizione 5 oggetti fondamentali: 5HTXHVW5HVSRQVH6HUYHU6HVVLRQe$SSOLFDWLRQ L’oggetto5HVSRQVHrappresenta la pagina HTML che viene passata al Web server e poi restituita al browser Questi oggetti sono implementati in ASP.DLL sotto forma di oggetti &20$XWRPDWLRQ e passati al motore Active Scripting Permette allo script di intervenire nella costruzione di questa pagina e di accedere agli elementi HTTP che vengono spediti assieme ad essa: • +HDGHU • &RQWHQW7\SHWH[WKWPOLPDJHJLILPDJHMSHJHFF • &RRNLHV • 6WDWXV³2N´RPHVVDJJLRGLHUURUH • ([SLUHV YDOLGLWj GHOOD SDJLQD LQ PLQXWL HYLWD ULFDULFDPHQWLLQXWLOL Request L’oggetto5HTXHVW mette a disposizione sotto forma di metodi e proprietà tutti gli elementi passati dal browser al web server nella richiesta HTTP: • 85/LQSDUWLFRODUHLSDUDPHWULGRSRLO" • 6HTXHQ]HGL3267R*(7QHOFDVRGLIRUP • &RRNLHV • ASP fa il parsing della richiesta e permette di accedere comodamente ai vari elementi. Per esempio 5HTXHVW4XHU\6WULQJ³1DPH´ restituisce 0DULR se l’URL era: La pagina viene costruita sequenzialmente ma 5HVSRQVH espone la property Buffer che permette di gestire una bufferizzazione e quindi di operare in modo non sequenziale Il metodo 5HVSRQVH:ULWH³[[[[´ permette di inserire righe HTML all’interno della pagina in costruzione, convertendo i caratteri speciali nelle sequenze opportune (p.e. > viene convertito in >) Con 5HVSRQVH:ULWH%LQDU\ possiamo invece scrivere sezioni binarie (p.e. immagini GIF) www.myserver.com/mypage.asp?Name=Mario&ID=35 A. Corradi, GII 2000, DCOM , 39 A. Corradi, GII 2000, DCOM , 40 ASP: ALTRI OGGETTI L’oggetto 6HVVLRQ permette di ovviare ai problemi connessi al fatto che HTTP è un protocollo “stateless” e quindi non mantiene alcun stato tra sessioni Session usa i cookies dietro le quinte per fornire alle applicazioni ASP un meccanismo di persistenza fra transazioni Session fornisce una serie di metodi per riconoscere l’utente e per gestire i timeout L’oggetto 6HUYHU mette a disposizione una serie di funzioni di utilità: URLDecode e HTMLDecode Il metodo più importante è 6HUYHU&UHDWH2EMHFW3URJ,' che consente di agganciare oggetti COM automation allo script L’oggetto $SSOLFDWLRQ viene utilizzato per memorizzare informazioni globali, condivise fra tutte le sessioni e gli utenti In ASP un’applicazione è l’insieme di tutte le pagine conenute in una directory e nelle sue sottodirectory A. Corradi, GII 2000, DCOM , 41 ASP e OGGETTI COM il motore $63 consente di creare e utilizzare oggetti &20$XWRPDWLRQ negli script Gli oggetti vengono istanziati con 6HUYHU&UHDWH2EMHFW3URJ,' si possono invocare i metodi esposti via ,GLVSDWFK Gli oggetti utilizzati possono essere normali oggetti $XWRPDWLRQ oppure essere “$63DZDUH” Questi ultimi sono in grado di accedere all’object model esposto dal motore ASP (Request, Response, Server, Session e Application) Quando viene invocato 6HUYHU&UHDWH2EMHFW ASP verifica nella type library se l’oggetto creato espone il metodo 2Q6WDUW3DJH In caso positivo, chiama 6WDUW3DJH passando come parametro una interfaccia specifiche di ASP detta ,VFULSWLQJ&RQWH[W ,6FULSWLQJ&RQWH[W espone 4 proprietà: 5HTXHVW, 5HVSRQVH, 6HUYHU, 6HVVLRQ e $SSOLFDWLRQ, ovvero O¶REMHFWPRGHO$63 l’oggetto COM si collega con l’applicazione ASP ed è in grado di accedere e tutte le sue funzionalità A. Corradi, GII 2000, DCOM , 42 ALTRE INFORMAZIONI Il linguaggio di default per le pagine ASP è 9%6FULSW ma è possibile definire un altro linguaggio attraverso la direttiva @LANGUAGE Per esempio inserendo il tag: #/$1*8$*(³-6FULSW´! la pagina ASP in cui è contenuto utilizza -VFULSW E’ anche possibile mescolare sezioni di script in diversi linguaggi utilizzando una versione estesa del tag <SCRIPT>: <SCRIPT LANGUAGE = “NomeLinguaggio” RUNAT=“Server”> ... </SCRIPT> Con ASP è possibile accedere ai database attraverso $'2 (Active Data Object), una tecnologia COM che permette l’accesso ai database via 2'%& o 2/('% Esiste una implementazione di ASP realizzata da Chili!Soft (Chili!ASP) che gira su altri web server: Netscape Fasttrack, Lotus Domino, IBM CSS ecc. e in diversi sistemi operativi (NT, Solaris...) A. Corradi, GII 2000, DCOM , 43 A. Corradi, GII 2000, DCOM , 44