Procedura: Personalizzare un'associazione System-Provided
Windows Communication Foundation (WCF) include diverse associazioni fornite dal sistema che consentono di configurare alcune delle proprietà degli elementi di associazione sottostanti, ma non tutte le proprietà. In questo argomento viene illustrato come impostare le proprietà sugli elementi di associazione per creare un'associazione personalizzata.
Per ulteriori informazioni su come creare e configurare direttamente gli elementi di associazione senza usare le associazioni fornite dal sistema, vedere Binding Personalizzati.
Per ulteriori informazioni sulla creazione e l'estensione di associazioni personalizzate, vedere Estendere le Associazioni.
In WCF tutti i binding sono costituiti da elementi di binding. Ogni elemento di associazione deriva dalla classe BindingElement. Le associazioni fornite dal sistema, come BasicHttpBinding, creano e configurano i loro elementi di associazione. In questo argomento viene illustrato come accedere e modificare le proprietà di questi elementi di associazione, che non sono esposti direttamente nell'associazione; in particolare, la classe BasicHttpBinding.
I singoli elementi di associazione sono contenuti in una raccolta rappresentata dalla classe BindingElementCollection e vengono aggiunti in questo ordine: Flusso delle transazioni, Reliable Session, Sicurezza, Duplex composito, Unidirezionale, Sicurezza flusso, Codifica messaggi e Trasporto. Si noti che non tutti gli elementi di associazione elencati sono necessari in ogni associazione. Gli elementi di associazione definiti dall'utente possono essere visualizzati anche in questa raccolta di elementi di associazione e 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:
Elemento facoltativo di associazione di sicurezza, la classe AsymmetricSecurityBindingElement usata con il trasporto HTTP (sicurezza a livello di messaggio) o la classe TransportSecurityBindingElement, che viene usata quando il livello di trasporto fornisce sicurezza, nel qual caso viene usato il trasporto HTTPS.
Elemento di associazione del codificatore di messaggi obbligatorio, TextMessageEncodingBindingElement o MtomMessageEncodingBindingElement.
Elemento di associazione del trasporto obbligatorio, HttpTransportBindingElemento HttpsTransportBindingElement.
In questo esempio viene creata un'istanza dell'associazione, viene generata un'associazione personalizzata da essa, vengono esaminati gli elementi di associazione nell'associazione personalizzata e, quando si trova l'elemento di associazione HTTP, viene impostata la relativa proprietà KeepAliveEnabled
su false
. La proprietà KeepAliveEnabled
non è esposta direttamente nella BasicHttpBinding
, pertanto è necessario creare un'associazione personalizzata per passare all'elemento di associazione e impostare questa proprietà.
Per modificare un binding fornito 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. BasicHttpBinding binding = new BasicHttpBinding(); binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate; binding.Security.Mode = BasicHttpSecurityMode.Message;
' 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 CustomBinding cb = new CustomBinding(binding); // Get the BindingElementCollection from this custom binding BindingElementCollection bec = cb.Elements();
' Create a custom binding from the binding Dim cb As New CustomBinding(binding) ' Get the BindingElementCollection from this custom binding Dim bec = cb.Elements
Scorrere la classe BindingElementCollection e, quando si trova la classe HttpTransportBindingElement, impostare la relativa proprietà KeepAliveEnabled su
false
.// Loop through the collection, and when you find the HTTP binding element // set its KeepAliveEnabled property to false foreach (BindingElement be in bec) { Type thisType = be.GetType(); Console.WriteLine(thisType); if (be is HttpTransportBindingElement) { HttpTransportBindingElement httpElement = (HttpTransportBindingElement)be; Console.WriteLine($"\tBefore: HttpTransportBindingElement.KeepAliveEnabled = {httpElement.KeepAliveEnabled}"); httpElement.KeepAliveEnabled = false; Console.WriteLine($"\tAfter: HttpTransportBindingElement.KeepAliveEnabled = {httpElement.KeepAliveEnabled}"); } }
' 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