1 //-----------------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 //-----------------------------------------------------------------------------
4 namespace System.ServiceModel.Channels
7 using System.ServiceModel;
8 using System.ServiceModel.Description;
9 using System.Xml.Schema;
10 using System.Collections.ObjectModel;
11 using System.Collections.Generic;
12 using WsdlNS = System.Web.Services.Description;
14 public class StandardBindingImporter : IWsdlImportExtension
16 void IWsdlImportExtension.BeforeImport(WsdlNS.ServiceDescriptionCollection wsdlDocuments, XmlSchemaSet xmlSchemas, ICollection<XmlElement> policy) { }
17 void IWsdlImportExtension.ImportContract(WsdlImporter importer, WsdlContractConversionContext context) { }
19 void IWsdlImportExtension.ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext endpointContext)
21 if (endpointContext == null)
22 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext");
24 #pragma warning suppress 56506 // Microsoft, endpointContext.Endpoint is never null
25 if (endpointContext.Endpoint.Binding == null)
26 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext.Binding");
28 if (endpointContext.Endpoint.Binding is CustomBinding)
30 BindingElementCollection elements = ((CustomBinding)endpointContext.Endpoint.Binding).Elements;
33 TransportBindingElement transport = elements.Find<TransportBindingElement>();
35 if (transport is HttpTransportBindingElement)
37 if (WSHttpBindingBase.TryCreate(elements, out binding))
39 SetBinding(endpointContext.Endpoint, binding);
41 else if (WSDualHttpBinding.TryCreate(elements, out binding))
43 SetBinding(endpointContext.Endpoint, binding);
45 else if (BasicHttpBinding.TryCreate(elements, out binding))
47 SetBinding(endpointContext.Endpoint, binding);
49 else if (NetHttpBinding.TryCreate(elements, out binding))
51 SetBinding(endpointContext.Endpoint, binding);
54 else if (transport is MsmqTransportBindingElement && NetMsmqBinding.TryCreate(elements, out binding))
56 SetBinding(endpointContext.Endpoint, binding);
58 else if (transport is NamedPipeTransportBindingElement && NetNamedPipeBinding.TryCreate(elements, out binding))
60 SetBinding(endpointContext.Endpoint, binding);
62 #pragma warning disable 0618
63 else if (transport is PeerTransportBindingElement && NetPeerTcpBinding.TryCreate(elements, out binding))
65 SetBinding(endpointContext.Endpoint, binding);
67 #pragma warning restore 0618
68 else if (transport is TcpTransportBindingElement && NetTcpBinding.TryCreate(elements, out binding))
70 SetBinding(endpointContext.Endpoint, binding);
74 void SetBinding(ServiceEndpoint endpoint, Binding binding)
76 binding.Name = endpoint.Binding.Name;
77 binding.Namespace = endpoint.Binding.Namespace;
78 endpoint.Binding = binding;