Prestazioni dei Servizi SOAP
Approfittando del fatto che fino a domattina sarò in ferie... ho fatto qualche test di prestazioni dei servizi SOAP sia su HTTP, che HTTPS che SOAP.TCP con l'ultima release di WSE2 (SP2).
Ecco i risultati che ho ottenuto:
Ho provato, in tutte le varie salse, un servizio, chiamandolo 1000 volte, per 3 volte (quindi 3000 in tutto) e vedendo il tempo medio impiegato. Il servizio restituiva un array di 20 item di tipo Customer così definiti:
<s:complexType name="Customer">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Email" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="Id" type="s:int" />
</s:sequence>
</s:complexType>
Per WS-Security intendo WS-SecureConversation (scambio del token) + WS-Security con o senza encryption (ENC) e firma digitale (DSIG).
Ed ecco l'interpretazione dei risultati:
- Ovviamente HTTP liscio è il più veloce
- SOAP.TCP liscio è più lento di HTTP, ma il vantaggio di SOAP.TCP non è la velocità, ma il fatto di poter lavorare peer-to-peer e in asincrono
- HTTPS è risultato molto veloce, leggermente di più di quello che mi aspettassi
- HTTP + WS-Security con encryption è risultato circa 3 volte più lento di HTTP "liscio", ma in questi tempi va calcolato lo scambio del token di WS-SecureConversation
- La firma digitale - con WSE2 - è quella che determina il vero rallentamento. Usiamola quindi solo quando serve davvero.
- I SoapService che sfruttano la possibilità di essere configurati come HttpHandler non sono particolarmente veloci, quindi è meglio usarli solo se abbiamo bisogno del massimo controllo sul messaggio SOAP, altrimenti meglio andare all'antica con gli ASMX.