Migrazione dei servizi Web WSE 3.0 a WCF
La migrazione dei servizi Web WSE 3.0 a Windows Communication Foundation (WCF) comporta diversi vantaggi, fra cui il miglioramento delle prestazioni, il supporto di trasporti e scenari di protezione aggiuntivi nonché la possibilità di applicare le specifiche WS-*. In particolare, la migrazione di un servizio Web da WSE 3.0 a WCF può comportare un miglioramento delle prestazioni compreso fra 200% e 400%. Per ulteriori informazioni sui trasporti supportati da WCF, vedere Scelta di un trasporto. Per un elenco degli scenari supportati da WCF, vedere Scenari di protezione comuni. Per un elenco delle specifiche supportate da WCF, vedere Guida di interoperabilità dei protocolli di servizi Web.
Nelle sezioni seguenti vengono fornite indicazioni su come eseguire la migrazione di funzionalità specifiche di un servizio Web da WSE 3.0 a WCF.
Indicazioni generali
Le applicazioni WSE 3.0 e WCF prevedono l'interoperabilità a livello di trasmissione e un insieme comune di terminologia. L'interoperabilità a livello di trasmissione delle applicazioni WSE 3.0 e WCF si basa sull'insieme di specifiche WS-* supportato da entrambe. Lo sviluppo di un'applicazione WSE 3.0 o WCF presenta un insieme comune di terminologia, ad esempio i nomi delle asserzioni di protezione turnkey in WSE e le modalità di autenticazione.
Benché vi siano molte analogie fra il modello di programmazione di WCF e quello di ASP.NET o WSE 3.0, di fatto tali modelli sono diversi. Per informazioni dettagliate sul modello di programmazione di WCF, vedere Ciclo di vita della programmazione di base.
Nota
Per eseguire la migrazione di un servizio Web da WSE a WCF è possibile utilizzare lo ServiceModel Metadata Utility Tool (Svcutil.exe) per generare un client. Tuttavia, le interfacce e le classi contenute in questo client sono utilizzabili anche come base per un servizio WCF. L'attributo OperationContractAttribute delle interfacce che vengono generate viene applicato ai membri del contratto con la proprietà ReplyAction impostata su *
. Quando un client WSE chiama un servizio Web con questa impostazione, viene generata l'eccezione Web.Services3.ResponseProcessingException: WSE910 indicante che si è verificato un errore durante l'elaborazione di un messaggio di risposta e che la descrizione dell'errore è contenuta nell'eccezione interna. Per risolvere questo problema, impostare la proprietà ReplyAction dell'attributo OperationContractAttribute su un valore diverso da null, ad esempio http://Microsoft.WCF.Documentation/ResponseToOCAMethod
.
Protezione
Servizi Web WSE 3.0 protetti mediante un file dei criteri
I servizi WCF possono utilizzare un file di configurazione per proteggere un servizio. Tale meccanismo è analogo a un file dei criteri di WSE 3.0. Quando in WSE 3.0 si protegge un servizio Web tramite un file dei criteri, si utilizza un'asserzione di protezione turnkey oppure un'asserzione di criteri personalizzata. Le asserzioni di protezione turnkey corrispondono in modo quasi identico alla modalità di autenticazione di un elemento di associazione di protezione di WCF. Oltre a presentare una denominazione analoga o identica, le modalità di autenticazione di WCF e le asserzioni di protezione turnkey di WSE 3.0 proteggono i messaggi utilizzando gli stessi tipi di credenziale. Ad esempio, l'asserzione di protezione turnkey usernameForCertificate di WSE 3.0 corrisponde alla modalità di autenticazione UsernameForCertificate di WCF. Gli esempi di codice seguenti illustrano la corrispondenza fra un criterio minimo che utilizza un'asserzione di protezione turnkey UsernameForCertificate di WSE 3.0 e una modalità di autenticazione usernameForCertificate di un'associazione personalizzata di WCF.
WSE 3.0
<policies>
<policy name="MyPolicy">
<usernameForCertificate messageProtectionOrder="SignBeforeEncrypt"
requireDeriveKeys="true"/>
</policy>
</policies>
WCF
<customBinding>
<binding name="MyBinding">
<security authenticationMode="UserNameForCertificate"
messageProtectionOrder="SignBeforeEncrypt"
requireDerivedKeys="true"/>
</binding>
</customBinding>
Per eseguire la migrazione delle impostazioni di protezione di un servizio Web specificate in un file dei criteri da WSE 3.0 a WCF, è necessario creare un'associazione personalizzata in un file di configurazione e quindi impostare l'asserzione di protezione turnkey sulla relativa modalità di autenticazione equivalente. Quando i client WSE 3.0 comunicano con il servizio occorre inoltre configurare l'associazione personalizzata in modo che utilizzi la specifica WS-Addressing dell'agosto 2004. Quando il servizio WCF di cui è stata eseguita la migrazione non richiede la comunicazione con i client WSE 3.0 e deve gestire solo la parità di protezione, anziché creare un'associazione personalizzata può essere conveniente utilizzare le associazioni definite dal sistema di WCF con le impostazioni di protezione appropriate.
Nella tabella seguente viene illustrata la corrispondenza fra un file dei criteri di WSE 3.0 e l'associazione personalizzata equivalente di WCF.
Asserzione di protezione turnkey di WSE 3.0 | Configurazione dell'associazione personalizzata di WCF |
---|---|
<usernameOverTransportSecurity /> |
|
<mutualCertificate10Security /> |
|
<usernameForCertificateSecurity /> |
|
<anonymousForCertificateSecurity /> |
|
<kerberosSecurity /> |
|
<mutualCertificate11Security /> |
|
Per ulteriori informazioni sulla creazione di associazioni personalizzate in WCF, vedere Associazioni personalizzate.
Servizi Web WSE 3.0 protetti mediante il codice dell'applicazione
Quando si utilizza WSE 3.0 o WCF i requisiti di protezione possono essere specificati nel codice anziché nella configurazione dell'applicazione. Per eseguire questa operazione in WSE 3.0 occorre creare una classe che deriva dalla classe Policy e quindi aggiungere i requisiti chiamando il metodo Add. Per informazioni più dettagliate sulla specifica dei requisiti di protezione in codice, vedere la procedura per proteggere un servizio Web senza ricorrere a un file dei criteri (la pagina potrebbe essere in inglese). In WCF, per specificare in codice i requisiti di protezione, è necessario creare un'istanza della classe BindingElementCollection e quindi aggiungere un'istanza di un elemento SecurityBindingElement all'insieme BindingElementCollection. Per impostare i requisiti delle asserzioni di protezione occorre utilizzare i metodi di supporto statici della modalità di autenticazione della classe SecurityBindingElement. Per informazioni più dettagliate sulla specifica in codice dei requisiti di protezione in WCF, vedere Procedura: creare un'associazione personalizzata utilizzando SecurityBindingElement e Procedura: creare un elemento SecurityBindingElement per una modalità di autenticazione specificata.
Asserzione di criteri personalizzata di WSE 3.0
In WSE 3.0 sono disponibili due tipi di asserzioni di criteri personalizzate: le asserzioni che proteggono i messaggi SOAP e quelle che non li proteggono. Le asserzioni di criteri che proteggono i messaggi SOAP derivano dalla classe SecurityPolicyAssertion di WSE 3.0 e l'equivalente concettuale in WCF è la classe SecurityBindingElement.
Un importante punto da tenere presente è che le asserzioni di protezione turnkey WSE 3.0 sono un sottoinsieme delle modalità di autenticazione WCF. Se è stata creata un'asserzione di criteri personalizzata in WSE 3.0 è possibile che esista una modalità di autenticazione equivalente in WCF. Ad esempio, anziché fornire un'asserzione di protezione CertificateOverTransport equivalente all'asserzione di protezione turnkey UsernameOverTransport, WSE 3.0 utilizza un certificato X.509 per eseguire l'autenticazione client. Se è stata definita un'asserzione di criteri personalizzata per questo scenario, WCF semplifica la migrazione. In particolare, WCF definisce una modalità di autenticazione per questo scenario, consentendo di utilizzare i metodi di supporto statici della modalità di autenticazione per configurare un elemento WCFSecurityBindingElement.
Quando in WCF non esiste alcuna modalità di autenticazione equivalente a un'asserzione di criteri personalizzata che protegge i messaggi SOAP, derivare una classe dalla classe TransportSecurityBindingElement, SymmetricSecurityBindingElement oppure AsymmetricSecurityBindingElementWCF e specificare l'elemento di associazione equivalente. Per informazioni più dettagliate, vedere Procedura: creare un'associazione personalizzata utilizzando SecurityBindingElement.
Per convertire un'asserzione di criteri personalizzata che non protegge i messaggi SOAP, vedere Filtri e l'esempio di Custom Message Interceptor.
Token di protezione personalizzato di WSE 3.0
Il modello di programmazione di WCF relativo alla creazione di un token personalizzato non corrisponde a quello di WSE 3.0. Per informazioni dettagliate sulla creazione di un token personalizzato in WSE, vedere Creazione di token di protezione personalizzati (il contenuto potrebbe essere in inglese). Per informazioni dettagliate sulla creazione di un token personalizzato in WCF, vedere Procedura: creare un token personalizzato.
Gestore del token personalizzato di WSE 3.0
Il modello di programmazione di WCF relativo alla creazione di un gestore del token personalizzato non corrisponde a quello di WSE 3.0. Per informazioni dettagliate sulla creazione di un gestore del token personalizzato e degli altri componenti necessari per un token di protezione personalizzato, vedere Procedura: creare un token personalizzato.
Nota
Se è stato creato un gestore del token di protezione UsernameToken personalizzato, WCF offre un meccanismo per specificare la logica di autenticazione in modo più semplice rispetto alla creazione di un gestore del token di protezione personalizzato. Per informazioni più dettagliate, vedere Procedura: utilizzare una convalida di nome utente e password personalizzata.
Servizi Web WSE 3.0 che utilizzano messaggi SOAP con codifica MTOM
Analogamente a un'applicazione WSE 3, un'applicazione WCF può specificare in configurazione l'utilizzo del meccanismo di codifica dei messaggi MTOM. Per eseguire la migrazione di questa impostazione, aggiungere l'mtomMessageEncoding element all'associazione del servizio. L'esempio di codice seguente illustra come specificare la codifica MTOM in WSE 3.0 per un servizio equivalente in WCF.
WSE 3.0
<messaging>
<mtom clientMode="On"/>
</messaging>
WCF
<customBinding>
<binding name="MyBinding">
<mtomMessageEncoding/>
</binding>
</customBinding>
Messaggistica
Applicazioni WSE 3.0 che utilizzano l'API del sistema di messaggistica di WSE
Quando si utilizza l'API del sistema di messaggistica di WSE per accedere in modo diretto ai dati XML scambiati fra il client e il servizio Web, l'applicazione può essere convertita in modo da utilizzare il formato POX (Plain Old XML). Per informazioni più dettagliate su POX, vedere Interoperabilità con applicazioni POX. Per informazioni più dettagliate sull'API del sistema di messaggistica di WSE, vedere Invio e ricezione di messaggi SOAP mediante l'API del sistema di messaggistica di WSE (la pagina potrebbe essere in inglese).
Trasporti
TCP
Per impostazione predefinita, i client e i servizi Web WSE 3.0 che inviano messaggi SOAP utilizzando il trasporto TCP non sono interoperativi con i client e i servizi Web WCF. Questa incompatibilità è dovuta a differenze nella modalità di frame del protocollo TCP e si basa inoltre su motivi legati alle prestazioni. È tuttavia disponibile un esempio di WCF nel quale viene illustrato in modo dettagliato come implementare una sessione TCP personalizzata interoperabile con WSE 3.0. Per informazioni dettagliate su questo esempio, vedere Transport: WSE 3.0 TCP Interoperability.
Per specificare che un'applicazione WCF utilizza il trasporto TCP, utilizzare l'netTcpBinding Element.
Trasporto personalizzato
L'equivalente di un trasporto personalizzato di WSE 3.0 in WCF è un'estensione di canale. Per informazioni dettagliate sulla creazione di un'estensione di canale, vedere Estensione del livello del canale.
Vedere anche
Attività
Procedura: creare un elemento SecurityBindingElement per una modalità di autenticazione specificata
Concetti
Ciclo di vita della programmazione di base
Associazioni personalizzate
Procedura: creare un'associazione personalizzata utilizzando SecurityBindingElement