Procedura: personalizzare un'associazione fornita dal sistema
Windows Communication Foundation (WCF) include diverse associazioni fornite dal sistema che consentono di configurare alcune delle proprietà degli elementi di associazione sottostanti. In questo argomento viene illustrato come impostare proprietà sugli elementi di associazione per creare un'associazione personalizzata.
Per ulteriori informazioni su su come creare e configurare direttamente elementi di associazione senza utilizzare le associazioni fornite dal sistema, vedere Associazioni personalizzate.
Per ulteriori informazioni su sulla creazione e l'estensione di associazioni personalizzate, vedere Estensione delle associazioni.
In WCF tutte le associazioni sono costituite da elementi di associazione. Ogni elemento di associazione deriva dalla classe BindingElement. Le associazioni fornite dal sistema, ad esempio BasicHttpBinding, creano e configurano propri elementi di associazione. In questo argomento viene illustrato come accedere e modificare le proprietà di questi elementi di associazione che non sono direttamente esposte sull'associazione; in particolare, la classe BasicHttpBinding.
I singoli elementi di associazione sono inclusi in una raccolta rappresentata dalla classe BindingElementCollection e vengono aggiunti nell'ordine seguente: Flusso delle transazioni, Sessione affidabile, Protezione, Duplex composito, Unidirezionale, Protezione di flusso, Codifica messaggi e Trasporto. Si noti che non tutti gli elementi di associazione elencati sono necessari in ogni associazione. In questa raccolta di elementi di associazione possono essere inclusi anche elementi di associazione definiti dall'utente, che devono essere visualizzati nello stesso ordine descritto in precedenza. Ad esempio, un trasporto definito dall'utente deve essere l'ultimo elemento della raccolta di elementi di associazione.
La classe BasicHttpBinding contiene tre elementi di associazione:
Un elemento di associazione di sicurezza facoltativo: la classe AsymmetricSecurityBindingElement utilizzata con il trasporto HTTP (protezione a livello di messaggio) o la classe TransportSecurityBindingElement utilizzata quando il livello di trasporto fornisce la protezione, caso in cui viene utilizzato il trasporto HTTPS.
Un elemento di associazione del codificatore dei messaggi obbligatorio: TextMessageEncodingBindingElement o MtomMessageEncodingBindingElement.
Un elemento di associazione del trasporto obbligatorio: HttpTransportBindingElement o HttpsTransportBindingElement.
In questo esempio viene creata un'istanza dell'associazione, da cui viene generata un'associazione personalizzata, vengono esaminati gli elementi di associazione nell'associazione personalizzata e, quando viene trovato l'elemento di associazione HTTP, viene impostata la proprietà KeepAliveEnabled
su false
. La proprietà KeepAliveEnabled
non è esposta direttamente su BasicHttpBinding
, pertanto è necessario creare un'associazione personalizzata per spostarsi verso il basso sull'elemento di associazione e impostare questa proprietà.
Per modificare un'associazione fornita dal sistema
Creare un'istanza della classe BasicHttpBinding e impostarne la modalità di sicurezza a livello di messaggio.
' Create an instance of the T:System.ServiceModel.BasicHttpBinding ' class and set its security mode to message-level security. Dim binding As New BasicHttpBinding() With binding.Security .Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate .Mode = BasicHttpSecurityMode.Message End With
Creare un'associazione personalizzata dall'associazione e creare una classe BindingElementCollection da una delle proprietà dell'associazione personalizzata.
' Create a custom binding from the binding Dim cb As New CustomBinding(binding) ' Get the BindingElementCollection from this custom binding Dim bec = cb.Elements
Eseguire un ciclo nella classe BindingElementCollection e, quando viene trovata la classe HttpTransportBindingElement, impostarne la proprietà KeepAliveEnabled su false.
' Loop through the collection, and when you find the HTTP binding element ' set its KeepAliveEnabled property to false For Each be In bec Dim thisType = be.GetType() Console.WriteLine(thisType) If TypeOf be Is HttpTransportBindingElement Then Dim httpElement As HttpTransportBindingElement = CType(be, HttpTransportBindingElement) Console.WriteLine(Constants.vbTab & "Before: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled) httpElement.KeepAliveEnabled = False Console.WriteLine(vbTab & "After: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled) End If Next be
Vedere anche
Riferimento
HttpTransportBindingElement
BasicHttpBinding
CustomBinding