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 &gt;)
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