| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel.Description
- {
- using System.Globalization;
- using System.ServiceModel.Channels;
- using System.ServiceModel;
- using System.Collections.Generic;
- public static class MetadataExchangeBindings
- {
- static Binding httpBinding;
- static Binding httpGetBinding;
- static Binding httpsBinding;
- static Binding httpsGetBinding;
- static Binding tcpBinding;
- static Binding pipeBinding;
- internal static Binding Http
- {
- get
- {
- // don't need to lock because no guarantee of instance identity
- if (httpBinding == null)
- {
- httpBinding = CreateHttpBinding();
- }
- return httpBinding;
- }
- }
- internal static Binding HttpGet
- {
- get
- {
- // don't need to lock because no guarantee of instance identity
- if (httpGetBinding == null)
- {
- httpGetBinding = CreateHttpGetBinding();
- }
- return httpGetBinding;
- }
- }
- internal static Binding Https
- {
- get
- {
- // don't need to lock because no guarantee of instance identity
- if (httpsBinding == null)
- {
- httpsBinding = CreateHttpsBinding();
- }
- return httpsBinding;
- }
- }
- internal static Binding HttpsGet
- {
- get
- {
- // don't need to lock because no guarantee of instance identity
- if (httpsGetBinding == null)
- {
- httpsGetBinding = CreateHttpsGetBinding();
- }
- return httpsGetBinding;
- }
- }
- internal static Binding Tcp
- {
- get
- {
- // don't need to lock because no guarantee of instance identity
- if (tcpBinding == null)
- {
- tcpBinding = CreateTcpBinding();
- }
- return tcpBinding;
- }
- }
- internal static Binding NamedPipe
- {
- get
- {
- // don't need to lock because no guarantee of instance identity
- if (pipeBinding == null)
- {
- pipeBinding = CreateNamedPipeBinding();
- }
- return pipeBinding;
- }
- }
- public static Binding CreateMexHttpBinding()
- {
- return MetadataExchangeBindings.CreateHttpBinding();
- }
- public static Binding CreateMexHttpsBinding()
- {
- return MetadataExchangeBindings.CreateHttpsBinding();
- }
- public static Binding CreateMexTcpBinding()
- {
- return MetadataExchangeBindings.CreateTcpBinding();
- }
- public static Binding CreateMexNamedPipeBinding()
- {
- return MetadataExchangeBindings.CreateNamedPipeBinding();
- }
- internal static Binding GetBindingForScheme(string scheme)
- {
- Binding binding = null;
- TryGetBindingForScheme(scheme, out binding);
- return binding;
- }
- internal static bool TryGetBindingForScheme(string scheme, out Binding binding)
- {
- if (String.Compare(scheme, "http", StringComparison.OrdinalIgnoreCase) == 0)
- {
- binding = Http;
- }
- else if (String.Compare(scheme, "https", StringComparison.OrdinalIgnoreCase) == 0)
- {
- binding = Https;
- }
- else if (String.Compare(scheme, "net.tcp", StringComparison.OrdinalIgnoreCase) == 0)
- {
- binding = Tcp;
- }
- else if (String.Compare(scheme, "net.pipe", StringComparison.OrdinalIgnoreCase) == 0)
- {
- binding = NamedPipe;
- }
- else
- {
- binding = null;
- }
- return binding != null;
- }
- static WSHttpBinding CreateHttpBinding()
- {
- WSHttpBinding binding = new WSHttpBinding(SecurityMode.None, /* reliableSessionEnabled */ false);
- binding.Name = MetadataStrings.MetadataExchangeStrings.HttpBindingName;
- binding.Namespace = MetadataStrings.MetadataExchangeStrings.BindingNamespace;
- return binding;
- }
- static WSHttpBinding CreateHttpsBinding()
- {
- WSHttpBinding binding = new WSHttpBinding(
- new WSHttpSecurity(SecurityMode.Transport, new HttpTransportSecurity(), new NonDualMessageSecurityOverHttp()), /* reliableSessionEnabled */ false);
- binding.Name = MetadataStrings.MetadataExchangeStrings.HttpsBindingName;
- binding.Namespace = MetadataStrings.MetadataExchangeStrings.BindingNamespace;
-
- return binding;
- }
- static CustomBinding CreateHttpGetBinding()
- {
- return CreateGetBinding(new HttpTransportBindingElement());
- }
- static CustomBinding CreateHttpsGetBinding()
- {
- return CreateGetBinding(new HttpsTransportBindingElement());
- }
- static CustomBinding CreateGetBinding(HttpTransportBindingElement httpTransport)
- {
- TextMessageEncodingBindingElement textEncoding = new TextMessageEncodingBindingElement();
- textEncoding.MessageVersion = MessageVersion.None;
- httpTransport.Method = "GET";
- httpTransport.InheritBaseAddressSettings = true;
- return new CustomBinding(textEncoding, httpTransport);
- }
- static CustomBinding CreateTcpBinding()
- {
- CustomBinding binding = new CustomBinding(MetadataStrings.MetadataExchangeStrings.TcpBindingName, MetadataStrings.MetadataExchangeStrings.BindingNamespace);
- TcpTransportBindingElement tcpTransport = new TcpTransportBindingElement();
- binding.Elements.Add(tcpTransport);
- return binding;
- }
- static CustomBinding CreateNamedPipeBinding()
- {
- CustomBinding binding = new CustomBinding(MetadataStrings.MetadataExchangeStrings.NamedPipeBindingName, MetadataStrings.MetadataExchangeStrings.BindingNamespace);
- NamedPipeTransportBindingElement pipeTransport = new NamedPipeTransportBindingElement();
- binding.Elements.Add(pipeTransport);
- return binding;
- }
- internal static bool IsSchemeSupported(string scheme)
- {
- Binding binding;
- return TryGetBindingForScheme(scheme, out binding);
- }
- }
- }
|