Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.ServiceModel / System / ServiceModel / Channels / StandardBindingImporter.cs
1 //-----------------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //-----------------------------------------------------------------------------
4 namespace System.ServiceModel.Channels
5 {
6     using System.Xml;
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;
13
14     public class StandardBindingImporter : IWsdlImportExtension
15     {
16         void IWsdlImportExtension.BeforeImport(WsdlNS.ServiceDescriptionCollection wsdlDocuments, XmlSchemaSet xmlSchemas, ICollection<XmlElement> policy) { }
17         void IWsdlImportExtension.ImportContract(WsdlImporter importer, WsdlContractConversionContext context) { }
18
19         void IWsdlImportExtension.ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext endpointContext)
20         {
21             if (endpointContext == null)
22                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext");
23
24 #pragma warning suppress 56506 // Microsoft, endpointContext.Endpoint is never null
25             if (endpointContext.Endpoint.Binding == null)
26                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext.Binding");
27
28             if (endpointContext.Endpoint.Binding is CustomBinding)
29             {
30                 BindingElementCollection elements = ((CustomBinding)endpointContext.Endpoint.Binding).Elements;
31
32                 Binding binding;
33                 TransportBindingElement transport = elements.Find<TransportBindingElement>();
34
35                 if (transport is HttpTransportBindingElement)
36                 {
37                     if (WSHttpBindingBase.TryCreate(elements, out binding))
38                     {
39                         SetBinding(endpointContext.Endpoint, binding);
40                     }
41                     else if (WSDualHttpBinding.TryCreate(elements, out binding))
42                     {
43                         SetBinding(endpointContext.Endpoint, binding);
44                     }
45                     else if (BasicHttpBinding.TryCreate(elements, out binding))
46                     {
47                         SetBinding(endpointContext.Endpoint, binding);
48                     }
49                     else if (NetHttpBinding.TryCreate(elements, out binding))
50                     {
51                         SetBinding(endpointContext.Endpoint, binding);
52                     }
53                 }
54                 else if (transport is MsmqTransportBindingElement && NetMsmqBinding.TryCreate(elements, out binding))
55                 {
56                     SetBinding(endpointContext.Endpoint, binding);
57                 }
58                 else if (transport is NamedPipeTransportBindingElement && NetNamedPipeBinding.TryCreate(elements, out binding))
59                 {
60                     SetBinding(endpointContext.Endpoint, binding);
61                 }
62 #pragma warning disable 0618                            
63                 else if (transport is PeerTransportBindingElement && NetPeerTcpBinding.TryCreate(elements, out binding))
64                 {
65                     SetBinding(endpointContext.Endpoint, binding);
66                 }
67 #pragma warning restore 0618                            
68                 else if (transport is TcpTransportBindingElement && NetTcpBinding.TryCreate(elements, out binding))
69                 {
70                     SetBinding(endpointContext.Endpoint, binding);
71                 }
72             }
73         }
74         void SetBinding(ServiceEndpoint endpoint, Binding binding)
75         {
76             binding.Name = endpoint.Binding.Name;
77             binding.Namespace = endpoint.Binding.Namespace;
78             endpoint.Binding = binding;
79         }
80     }
81 }