Procedura: creare un'associazione personalizzata utilizzando SecurityBindingElement
In Windows Communication Foundation (WCF) sono incluse numerose associazioni fornite dal sistema che possono essere configurate, ma che non forniscono totale flessibilità durante la configurazione di tutte le opzioni di protezione supportate da WCF. In questo argomento viene illustrato come creare direttamente un'associazione personalizzata di singoli elementi di associazione e vengono evidenziate alcune impostazioni di protezione che è possibile specificare durante la creazione di tale associazione. Per ulteriori informazioni sulla creazione di associazioni personalizzate, vedere Estensione delle associazioni.
Creazione di un'associazione personalizzata
In WCF tutte le associazioni sono costituite da elementi di associazione. Ogni elemento di associazione deriva dalla classe BindingElement. Per le associazioni standard fornite dal sistema, vengono creati e configurati gli elementi di associazione, sebbene sia possibile personalizzare alcune delle impostazioni delle proprietà.
Al contrario, per creare un'associazione personalizzata, vengono creati e configurati gli elementi di associazione dai quali viene creato CustomBinding.
A tale scopo, vengono aggiunti singoli elementi di associazione a un insieme rappresentato da un'istanza della classe BindingElementCollection, quindi la proprietà Elements di CustomBinding viene impostata allo stesso modo dell'oggetto. È necessario aggiungere gli elementi di associazione nell'ordine seguente: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding e Transport. Si noti che non tutti gli elementi di associazione elencati sono necessari in ogni associazione.
SecurityBindingElement
Tre elementi di associazione sono correlati alla protezione a livello di messaggio e sono tutti derivati dalla classe SecurityBindingElement. I tre elementi sono TransportSecurityBindingElement, SymmetricSecurityBindingElement e AsymmetricSecurityBindingElement. TransportSecurityBindingElement viene utilizzato per fornire una protezione in modalità mista. Gli altri due elementi sono utilizzati quando la protezione è fornita dal livello di messaggio.
Le classi aggiuntive vengono utilizzate quando viene fornita la protezione a livello di trasporto:
Elementi di associazione obbligatori
Esiste un ampio numero di possibili elementi di associazione che si possono combinare in un'associazione. Non tutte queste combinazioni sono valide. In questa sezione vengono descritti gli elementi obbligatori che devono essere presenti in un'associazione di protezione.
Le associazioni di protezione valide dipendono da molti fattori, tra cui:
- Modalità di protezione.
- Protocollo di trasporto.
- Modello di scambio dei messaggi (MEP, Message Exchange Pattern) specificato nel contratto.
Nella tabella seguente vengono illustrate le configurazioni dello stack dell'elemento di associazione valide per ogni combinazione dei fattori precedenti. Si noti che si tratta di requisiti minimi. È possibile aggiungere ulteriori elementi all'associazione, ad esempio elementi di associazione di codifica dei messaggi, di transazione e di altro tipo.
Modalità di protezione | Transport | Modello di scambio dei messaggi del contratto | ||||
---|---|---|---|---|---|---|
|
|
Datagramma |
Request/Reply |
Duplex |
||
Transport |
Https |
|||||
|
|
OneWayBindingElement |
||||
|
|
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|||
|
TCP |
|||||
|
|
OneWayBindingElement |
||||
|
|
SSL o Windows StreamSecurityBindingElement |
SSL o Windows StreamSecurityBindingElement |
SSL o Windows StreamSecurityBindingElement |
||
|
|
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||
Messaggio |
Http |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement (modalità di autenticazione = SecureConversation) |
||
|
|
|
|
CompositeDuplexBindingElement |
||
|
|
OneWayBindingElement |
|
OneWayBindingElement |
||
|
|
HttpTransportBindingElement |
HttpTransportBindingElement |
HttpTransportBindingElement |
||
|
Tcp |
SecurityBindingElement |
SecurityBindingElement |
SymmetricSecurityBindingElement (modalità di autenticazione = SecureConversation) |
||
|
|
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||
Misto (trasporto con credenziali messaggio) |
Https |
TransportSecurityBindingElement |
TransportSecurityBindingElement |
|
||
|
|
OneWayBindingElement |
|
|
||
|
|
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|
||
|
TCP |
TransportSecurityBindingElement |
SymmetricSecurityBindingElement (modalità di autenticazione = SecureConversation) |
SymmetricSecurityBindingElement (modalità di autenticazione = SecureConversation) |
||
|
|
OneWayBindingElement |
||||
|
|
SSL o Windows StreamSecurityBindingElement |
SSL o Windows StreamSecurityBindingElement |
SSL o Windows StreamSecurityBindingElement |
||
|
|
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
Si noti che esistono molte impostazioni configurabili in SecurityBindingElements. Per ulteriori informazioni, vedere Modalità di autenticazione di SecurityBindingElement.
Per ulteriori informazioni, vedere Conversazioni e sessioni protette.
Procedure
Per creare un'associazione personalizzata che utilizza un SymmetricSecurityBindingElement
Creare un'istanza della classe BindingElementCollection con il nome
outputBec
.Chiamare il metodo statico M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true) che restituisce un'istanza della classe SymmetricSecurityBindingElement.
Aggiungere SymmetricSecurityBindingElement all'insieme (
outputBec
) chiamando il metodo Add di Collection della classe BindingElement.Creare un'istanza della classe TextMessageEncodingBindingElement e aggiungerla all'insieme (
outputBec
). In tal modo viene specificata la codifica utilizzata dall'associazione.Creare un HttpTransportBindingElement e aggiungerlo all'insieme (
outputBec
). In tal modo viene specificato che l'associazione utilizza il trasporto HTTP.Creare una nuova associazione personalizzata creando un'istanza della classe CustomBinding e passando l'insieme
outputBec
al costruttore.L'associazione personalizzata risultante condivide molte delle stesse caratteristiche di WSHttpBinding standard. Specifica la protezione a livello di messaggio e le credenziali di Windows, ma disattiva le sessioni protette. Richiede che la credenziale del servizio venga specificata fuori banda e non crittografa le firme. Quest'ultima funzione può essere controllata solo impostando la proprietà MessageProtectionOrder come illustrato nel passaggio 4. Le altre due possono essere controllate utilizzando le impostazioni sull'associazione standard.
Esempio
Descrizione
Nell'esempio seguente è riportata una funzione completa per creare un'associazione personalizzata che utilizza un SymmetricSecurityBindingElement.
Codice
Vedere anche
Riferimenti
SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding
Concetti
Associazioni fornite dal sistema