Пример #1
0
        void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
        {
            var mebe = new TextMessageEncodingBindingElement();

            mebe.MessageVersion = this.MessageVersion;
            ((IWsdlExportExtension)mebe).ExportEndpoint(exporter, context);
        }
        void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext endpointContext)
        {
            bool createdNew;
            MessageEncodingBindingElement encodingBindingElement = FindMessageEncodingBindingElement(endpointContext, out createdNew);

            TransportBindingElement.ExportWsdlEndpoint(exporter, endpointContext, this.WsdlTransportUri, encodingBindingElement.MessageVersion.Addressing);
        }
Пример #3
0
        private static SoapBinding GetSoapBinding(WsdlEndpointConversionContext endpointContext, WsdlExporter exporter)
        {
            EnvelopeVersion item        = null;
            SoapBinding     soapBinding = null;
            object          obj         = null;
            object          obj1        = new object();

            if (exporter.State.TryGetValue(obj1, out obj))
            {
                Dictionary <System.Web.Services.Description.Binding, EnvelopeVersion> bindings = obj as Dictionary <System.Web.Services.Description.Binding, EnvelopeVersion>;
                if (bindings != null && bindings.ContainsKey(endpointContext.WsdlBinding))
                {
                    item = bindings[endpointContext.WsdlBinding];
                }
            }
            if (item == EnvelopeVersion.None)
            {
                return(null);
            }
            foreach (object extension in endpointContext.WsdlBinding.Extensions)
            {
                SoapBinding soapBinding1 = extension as SoapBinding;
                if (soapBinding1 == null)
                {
                    continue;
                }
                soapBinding = soapBinding1;
            }
            return(soapBinding);
        }
        void IWsdlImportExtension.ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

#pragma warning suppress 56506 // Microsoft, these properties cannot be null in this context
            if (context.Endpoint.Binding == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context.Endpoint.Binding");
            }

#pragma warning suppress 56506 // Microsoft, CustomBinding.Elements never be null
            TransportBindingElement transportBindingElement = GetBindingElements(context).Find <TransportBindingElement>();

            bool transportHandledExternaly = (transportBindingElement != null) && !StateHelper.IsRegisteredTransportBindingElement(importer, context);
            if (transportHandledExternaly)
            {
                return;
            }

#pragma warning suppress 56506 // Microsoft, these properties cannot be null in this context
            WsdlNS.SoapBinding soapBinding = (WsdlNS.SoapBinding)context.WsdlBinding.Extensions.Find(typeof(WsdlNS.SoapBinding));
            if (soapBinding != null && transportBindingElement == null)
            {
                CreateLegacyTransportBindingElement(importer, soapBinding, context);
            }

            // Try to import WS-Addressing address from the port
            if (context.WsdlPort != null)
            {
                ImportAddress(context, transportBindingElement);
            }
        }
Пример #5
0
        bool ImportBasicHttpEndpoint(WsdlEndpointConversionContext context)
        {
            var http = context.Endpoint.Binding as BasicHttpBinding;

            if (http == null)
            {
                return(false);
            }

            WS.SoapAddressBinding address = null;
            foreach (var extension in context.WsdlPort.Extensions)
            {
                var check = extension as WS.SoapAddressBinding;
                if (check != null)
                {
                    address = check;
                    break;
                }
            }

            if (address == null)
            {
                return(false);
            }

            context.Endpoint.Address       = new EndpointAddress(address.Location);
            context.Endpoint.ListenUri     = new Uri(address.Location);
            context.Endpoint.ListenUriMode = ListenUriMode.Explicit;
            return(true);
        }
Пример #6
0
        /// <summary>
        /// When ExportEndpoint is called, the XML schemas have been generated. Now we can manipulate to
        /// our heart's content.
        /// </summary>
        void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
        {
            foreach (var p in _requiredParameter)
            {
                var schemas = exporter.GeneratedXmlSchemas.Schemas(p.Namespace);

                foreach (XmlSchema schema in schemas)
                {
                    var message     = (XmlSchemaElement)schema.Elements[p.XmlQualifiedName];
                    var complexType = message.ElementSchemaType as XmlSchemaComplexType;
                    Debug.Assert(complexType != null, "Expected input message to be complex type.");
                    var sequence = complexType.Particle as XmlSchemaSequence;
                    Debug.Assert(sequence != null, "Expected a sequence.");

                    foreach (XmlSchemaElement item in sequence.Items)
                    {
                        if (item.Name == p.Name)
                        {
                            item.MinOccurs       = 1;
                            item.MinOccursString = "1";
                            break;
                        }
                    }
                }
            }

            // Throw away the temporary list we generated
            _requiredParameter = null;
        }
 public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
 {
     if (context.Endpoint != null && context.Endpoint.Address.Uri.Scheme.Equals("net.tcp"))
     {
         context.WsdlPort.Service.Ports.Remove(context.WsdlPort);
     }
 }
        static BindingElementCollection GetBindingElements(WsdlEndpointConversionContext context)
        {
            Binding binding = context.Endpoint.Binding;
            BindingElementCollection elements = binding is CustomBinding ? ((CustomBinding)binding).Elements : binding.CreateBindingElements();

            return(elements);
        }
Пример #9
0
 void IWsdlImportExtension.ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext context)
 {
     if (context != null && context.WsdlBinding != null && ContainsHttpBindingExtension(context.WsdlBinding))
     {
         httpBindingContracts.Add(context.ContractConversionContext.Contract);
     }
 }
        public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
        {
            BindingElementCollection      bindingElements        = context.Endpoint.Binding.CreateBindingElements();
            MessageEncodingBindingElement encodingBindingElement = bindingElements.Find <MessageEncodingBindingElement>();

            if (encodingBindingElement == null)
            {
                encodingBindingElement = new TextMessageEncodingBindingElement();
            }

            // Set SoapBinding Transport URI
            if (UdpPolicyStrings.UdpNamespace != null)
            {
                WsdlNS.SoapBinding soapBinding = GetSoapBinding(context, exporter);

                if (soapBinding != null)
                {
                    soapBinding.Transport = UdpPolicyStrings.UdpNamespace;
                }
            }

            if (context.WsdlPort != null)
            {
                AddAddressToWsdlPort(context.WsdlPort, context.Endpoint.Address, encodingBindingElement.MessageVersion.Addressing);
            }
        }
        internal static void ExportWsdlEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext endpointContext,
                                                string wsdlTransportUri, EndpointAddress address, AddressingVersion addressingVersion)
        {
            if (exporter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

            if (endpointContext == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext");
            }

            // Set SoapBinding Transport URI
#pragma warning suppress 56506 // [....], these properties cannot be null in this context
            BindingElementCollection bindingElements = endpointContext.Endpoint.Binding.CreateBindingElements();
            if (wsdlTransportUri != null)
            {
                WsdlNS.SoapBinding soapBinding = SoapHelper.GetOrCreateSoapBinding(endpointContext, exporter);

                if (soapBinding != null)
                {
                    soapBinding.Transport = wsdlTransportUri;
                }
            }

            if (endpointContext.WsdlPort != null)
            {
                WsdlExporter.WSAddressingHelper.AddAddressToWsdlPort(endpointContext.WsdlPort, address, addressingVersion);
            }
        }
        void IWsdlImportExtension.ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }
            if (context.Endpoint.Binding == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context.Endpoint.Binding");
            }
            TransportBindingElement transportBindingElement = GetBindingElements(context).Find <TransportBindingElement>();

            if ((transportBindingElement == null) || StateHelper.IsRegisteredTransportBindingElement(importer, context))
            {
                SoapBinding soapBinding = (SoapBinding)context.WsdlBinding.Extensions.Find(typeof(SoapBinding));
                if ((soapBinding != null) && (transportBindingElement == null))
                {
                    CreateLegacyTransportBindingElement(importer, soapBinding, context);
                }
                if (context.WsdlPort != null)
                {
                    ImportAddress(context, transportBindingElement);
                }
            }
        }
        private static void ImportAddress(WsdlEndpointConversionContext context)
        {
            EndpointAddress endpointAddress = null;

            if (context.WsdlPort != null)
            {
                XmlElement         xmlElement         = context.WsdlPort.Extensions.Find("EndpointReference", "http://www.w3.org/2005/08/addressing");
                XmlElement         xmlElement1        = context.WsdlPort.Extensions.Find("EndpointReference", "http://schemas.xmlsoap.org/ws/2004/08/addressing");
                SoapAddressBinding soapAddressBinding = (SoapAddressBinding)context.WsdlPort.Extensions.Find(typeof(SoapAddressBinding));
                if (xmlElement != null)
                {
                    endpointAddress = EndpointAddress.ReadFrom(AddressingVersion.WSAddressing10, new XmlNodeReader(xmlElement));
                }
                if (xmlElement1 != null)
                {
                    endpointAddress = EndpointAddress.ReadFrom(AddressingVersion.WSAddressingAugust2004, new XmlNodeReader(xmlElement1));
                }
                else if (soapAddressBinding != null)
                {
                    endpointAddress = new EndpointAddress(soapAddressBinding.Location);
                }
            }
            if (endpointAddress != null)
            {
                context.Endpoint.Address = endpointAddress;
            }
        }
Пример #14
0
 void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
 {
     ((IWsdlExportExtension) new TextMessageEncodingBindingElement
     {
         MessageVersion = this.msgVersion
     }).ExportEndpoint(exporter, context);
 }
Пример #15
0
        void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext endpointContext)
        {
            bool flag;
            MessageEncodingBindingElement element = this.FindMessageEncodingBindingElement(endpointContext, out flag);

            TransportBindingElement.ExportWsdlEndpoint(exporter, endpointContext, "http://schemas.microsoft.com/soap/peer", element.MessageVersion.Addressing);
        }
        void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter,
                                                 WsdlEndpointConversionContext context)
        {
            var soap_binding = new WS.Soap12Binding();

            soap_binding.Transport = "http://schemas.microsoft.com/soap/tcp";
            soap_binding.Style     = WS.SoapBindingStyle.Document;
            context.WsdlBinding.Extensions.Add(soap_binding);

            var address = context.Endpoint.Address;
            var uri     = address.Uri.AbsoluteUri;

            var soap_address = new WS.Soap12AddressBinding();

            soap_address.Location = uri;
            context.WsdlPort.Extensions.Add(soap_address);

            var doc          = new XmlDocument();
            var endpoint_ref = doc.CreateElement(
                "EndpointReference", AddressingVersion.WSAddressing10.Namespace);
            var endpoint_addr = doc.CreateElement(
                "Address", AddressingVersion.WSAddressing10.Namespace);

            endpoint_addr.InnerText = uri;
            endpoint_ref.AppendChild(endpoint_addr);
            context.WsdlPort.Extensions.Add(endpoint_ref);
        }
Пример #17
0
        private void ImportXRoadPort(WsdlEndpointConversionContext context)
        {
            if (context.WsdlPort == null)
            {
                return;
            }

            var addressNode = context.WsdlPort.Extensions.Find("address", NamespaceConstants.XROAD31);

            if (addressNode != null)
            {
                context.WsdlPort.Extensions.Remove(addressNode);
            }

            var titleExtensions = context.WsdlPort.Extensions.FindAll("title", NamespaceConstants.XROAD31).ToList();

            if (!titleExtensions.Any())
            {
                return;
            }

            var documentationContractBehavior = new DocumentationContractBehavior();

            foreach (var node in titleExtensions)
            {
                var languageAttribute = node.GetAttribute("lang", NamespaceConstants.XML);

                documentationContractBehavior.AddComment(languageAttribute ?? "", node.InnerText);
                context.WsdlPort.Extensions.Remove(node);
            }

            context.ContractConversionContext.Contract.Behaviors.Add(documentationContractBehavior);
        }
 public void ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext endpointContext)
 {
     System.ServiceModel.Channels.Binding binding;
     if (endpointContext == null)
     {
         throw new ArgumentNullException("endpointContext");
     }
     if (endpointContext.Endpoint.Binding == null)
     {
         throw new ArgumentNullException("endpointContext.Binding");
     }
     if (endpointContext.Endpoint.Binding is CustomBinding)
     {
         BindingElementCollection elements = ((CustomBinding)endpointContext.Endpoint.Binding).Elements;
         if (elements.Find <HttpRelayTransportBindingElement>() != null)
         {
             elements.Remove <HttpsTransportBindingElement>();
             if (WSHttpRelayBindingBase.TryCreate(elements, out binding))
             {
                 StandardRelayBindingImporter.SetBinding(endpointContext.Endpoint, binding);
                 return;
             }
             if (BasicHttpRelayBinding.TryCreate(elements, out binding))
             {
                 StandardRelayBindingImporter.SetBinding(endpointContext.Endpoint, binding);
                 return;
             }
         }
         else if (elements.Find <TcpRelayTransportBindingElement>() != null && NetTcpRelayBinding.TryCreate(elements, out binding))
         {
             StandardRelayBindingImporter.SetBinding(endpointContext.Endpoint, binding);
         }
     }
 }
Пример #19
0
        public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
        {
            var scheme = HttpContext.Current.Request.Headers["X-Forwarded-Proto"] ?? HttpContext.Current.Request.Url.Scheme;
            var host   = HttpContext.Current.Request.Url.Host;

            _location = new Uri($"{scheme}://{host}");

            foreach (object extension in context.WsdlPort.Extensions)
            {
                SoapAddressBinding addr = (extension as SoapAddressBinding);
                if (addr != null)
                {
                    addr.Location = Rewrite(addr.Location).ToString();
                }
            }

            EnumerateWsdlsAndSchemas(exporter.GeneratedWsdlDocuments, exporter.GeneratedXmlSchemas);

            foreach (ServiceDescription description in exporter.GeneratedWsdlDocuments)
            {
                FixImportAddresses(exporter.GeneratedWsdlDocuments, description, exporter.GeneratedXmlSchemas);
            }
            foreach (XmlSchema schema in exporter.GeneratedXmlSchemas.Schemas())
            {
                FixImportAddresses(exporter.GeneratedXmlSchemas, schema);
            }
        }
Пример #20
0
        private static WsdlNS.SoapBinding GetSoapBinding(WsdlEndpointConversionContext endpointContext, WsdlExporter exporter)
        {
            EnvelopeVersion envelopeVersion = null;

            WsdlNS.SoapBinding existingSoapBinding = null;
            object             versions            = null;
            object             SoapVersionStateKey = new object();

            //get the soap version state
            if (exporter.State.TryGetValue(SoapVersionStateKey, out versions))
            {
                if (versions != null && ((Dictionary <WsdlNS.Binding, EnvelopeVersion>)versions).ContainsKey(endpointContext.WsdlBinding))
                {
                    envelopeVersion = ((Dictionary <WsdlNS.Binding, EnvelopeVersion>)versions)[endpointContext.WsdlBinding];
                }
            }

            if (envelopeVersion == EnvelopeVersion.None)
            {
                return(null);
            }

            //get existing soap binding
            foreach (object o in endpointContext.WsdlBinding.Extensions)
            {
                if (o is WsdlNS.SoapBinding)
                {
                    existingSoapBinding = (WsdlNS.SoapBinding)o;
                }
            }

            return(existingSoapBinding);
        }
Пример #21
0
        public void ExportEndpoint(
            WsdlExporter exporter,
            WsdlEndpointConversionContext context)
        {
            var wsdl    = exporter.GeneratedWsdlDocuments[0];
            var schemas = exporter.GeneratedXmlSchemas;

            // In order to make generated WSDL more readable, common SOAP + SAML
            // namespaces are added to the head of the WSDL file
            var namespaces =
                Utils.Namespaces.Merge(
                    wsdl.Namespaces.ToArray(),
                    Utils.Namespaces.Required
                    );

            var mainPolicy     = new List <Element>();
            var mainPolicyName = context.WsdlBinding.Name + "_policy";

            if (wsdl.Extensions[0] is XmlElement policy)
            {
                mainPolicy.Add(Utils.Parse.Extension.Policy(policy));
            }

            // In order to ensure we always get the same WSDL even if we choose
            // ?singleWsdl or ?wsdl which limits the possibilities of errors.
            ClearTypes(wsdl);
            ClearMainPolicy(wsdl, mainPolicyName);

            AddNamespaces(wsdl, namespaces);
            AddTypes(wsdl, schemas);
            AddPoliciesMain(wsdl, mainPolicyName, mainPolicy, token);
        }
Пример #22
0
        public void ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext context)
        {
            var custom = context.Endpoint.Binding as CustomBinding;

            if (custom == null)
            {
                return;
            }

            var soapHttp = GetHttpSoapBinding(context.WsdlBinding);

            if (soapHttp != null)
            {
                ImportBasicHttpBinding(importer, context, custom, soapHttp);
                return;
            }

            var soapTcp = GetTcpSoapBinding(context.WsdlBinding);

            if (soapTcp != null)
            {
                ImportNetTcpBinding(importer, context, custom, soapTcp);
                return;
            }
        }
        static void EnsureMessageEncoding(WsdlEndpointConversionContext context, MessageEncodingBindingElement encodingBindingElement)
        {
            EnvelopeVersion   soapVersion = SoapHelper.GetSoapVersion(context.WsdlBinding);
            AddressingVersion addressingVersion;

            if (encodingBindingElement == null)
            {
                encodingBindingElement = new TextMessageEncodingBindingElement();
                ConvertToCustomBinding(context).Elements.Add(encodingBindingElement);

                addressingVersion = AddressingVersion.None;
            }
            else
            {
                if (soapVersion == EnvelopeVersion.None)
                {
                    addressingVersion = AddressingVersion.None;
                }
                else
                {
                    addressingVersion = encodingBindingElement.MessageVersion.Addressing;
                }
            }

            MessageVersion newMessageVersion = MessageVersion.CreateVersion(soapVersion, addressingVersion);

            if (!encodingBindingElement.MessageVersion.IsMatch(newMessageVersion))
            {
                ConvertToCustomBinding(context).Elements.Find <MessageEncodingBindingElement>().MessageVersion
                    = MessageVersion.CreateVersion(soapVersion, addressingVersion);
            }
        }
        void IWsdlImportExtension.ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext endpointContext)
        {
            if (endpointContext == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext");
            }

#pragma warning suppress 56506 // [....], endpointContext.Endpoint is never null
            if (endpointContext.Endpoint.Binding == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext.Binding");
            }

            if (endpointContext.Endpoint.Binding is CustomBinding)
            {
                BindingElementCollection elements = ((CustomBinding)endpointContext.Endpoint.Binding).Elements;

                Binding binding;
                TransportBindingElement transport = elements.Find <TransportBindingElement>();

                if (transport is HttpTransportBindingElement)
                {
                    if (WSHttpBindingBase.TryCreate(elements, out binding))
                    {
                        SetBinding(endpointContext.Endpoint, binding);
                    }
                    else if (WSDualHttpBinding.TryCreate(elements, out binding))
                    {
                        SetBinding(endpointContext.Endpoint, binding);
                    }
                    else if (BasicHttpBinding.TryCreate(elements, out binding))
                    {
                        SetBinding(endpointContext.Endpoint, binding);
                    }
                    else if (NetHttpBinding.TryCreate(elements, out binding))
                    {
                        SetBinding(endpointContext.Endpoint, binding);
                    }
                }
                else if (transport is MsmqTransportBindingElement && NetMsmqBinding.TryCreate(elements, out binding))
                {
                    SetBinding(endpointContext.Endpoint, binding);
                }
                else if (transport is NamedPipeTransportBindingElement && NetNamedPipeBinding.TryCreate(elements, out binding))
                {
                    SetBinding(endpointContext.Endpoint, binding);
                }
#pragma warning disable 0618
                else if (transport is PeerTransportBindingElement && NetPeerTcpBinding.TryCreate(elements, out binding))
                {
                    SetBinding(endpointContext.Endpoint, binding);
                }
#pragma warning restore 0618
                else if (transport is TcpTransportBindingElement && NetTcpBinding.TryCreate(elements, out binding))
                {
                    SetBinding(endpointContext.Endpoint, binding);
                }
            }
        }
Пример #25
0
 void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
     }
     SoapHelper.SetSoapVersion(context, exporter, System.ServiceModel.Channels.MessageVersion.Soap12WSAddressing10.Envelope);
 }
Пример #26
0
 void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
 {
     if (context == null)
     {
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
     }
     SoapHelper.SetSoapVersion(context, exporter, this.messageVersion.Envelope);
 }
        void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
        {
            // The MessageEncodingBindingElement is responsible for ensuring that the WSDL has the correct
            // SOAP version. We can delegate to the WCF implementation of TextMessageEncodingBindingElement for this.
            TextMessageEncodingBindingElement mebe = new TextMessageEncodingBindingElement();

            mebe.MessageVersion = this.msgVersion;
            ((IWsdlExportExtension)mebe).ExportEndpoint(exporter, context);
        }
Пример #28
0
        /// <summary>
        /// Writes custom Web Services Description Language (WSDL) elements into the generated WSDL for an endpoint.
        /// </summary>
        /// <param name="exporter">The <see cref="T:System.ServiceModel.Description.WsdlExporter" /> that exports the endpoint information.</param>
        /// <param name="context">Provides mappings from exported WSDL elements to the endpoint description.</param>
        public void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
        {
            BindingElementCollection      bindingElements        = context.Endpoint.Binding.CreateBindingElements();
            MessageEncodingBindingElement encodingBindingElement = bindingElements.Find <MessageEncodingBindingElement>() ?? new TextMessageEncodingBindingElement();

            if (context.WsdlPort != null)
            {
                AddAddressToWsdlPort(context.WsdlPort, context.Endpoint.Address, encodingBindingElement.MessageVersion.Addressing);
            }
        }
Пример #29
0
        public void ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext context)
        {
            // Only import the binding, not the endpoint.
            if (context.WsdlPort == null)
            {
                return;
            }

            DoImportEndpoint(context);
        }
        static CustomBinding ConvertToCustomBinding(WsdlEndpointConversionContext context)
        {
            CustomBinding customBinding = context.Endpoint.Binding as CustomBinding;

            if (customBinding == null)
            {
                customBinding            = new CustomBinding(context.Endpoint.Binding);
                context.Endpoint.Binding = customBinding;
            }
            return(customBinding);
        }