File: WsdlEndpointConversionContext.cs

package info (click to toggle)
mono 4.6.2.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 778,148 kB
  • ctags: 914,052
  • sloc: cs: 5,779,509; xml: 2,773,713; ansic: 432,645; sh: 14,749; makefile: 12,361; perl: 2,488; python: 1,434; cpp: 849; asm: 531; sql: 95; sed: 16; php: 1
file content (167 lines) | stat: -rw-r--r-- 7,548 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//-----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------

namespace System.ServiceModel.Description
{
    using System.IO;
    using System.ServiceModel.Channels;
    using System.Xml;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using WsdlNS = System.Web.Services.Description;

    public class WsdlEndpointConversionContext
    {

        readonly ServiceEndpoint endpoint;
        readonly WsdlNS.Binding wsdlBinding;
        readonly WsdlNS.Port wsdlPort;
        readonly WsdlContractConversionContext contractContext;

        readonly Dictionary<OperationDescription, WsdlNS.OperationBinding> wsdlOperationBindings;
        readonly Dictionary<WsdlNS.OperationBinding, OperationDescription> operationDescriptionBindings;
        readonly Dictionary<MessageDescription, WsdlNS.MessageBinding> wsdlMessageBindings;
        readonly Dictionary<FaultDescription, WsdlNS.FaultBinding> wsdlFaultBindings;
        readonly Dictionary<WsdlNS.MessageBinding, MessageDescription> messageDescriptionBindings;
        readonly Dictionary<WsdlNS.FaultBinding, FaultDescription> faultDescriptionBindings;
        
        internal WsdlEndpointConversionContext(WsdlContractConversionContext contractContext, ServiceEndpoint endpoint, WsdlNS.Binding wsdlBinding, WsdlNS.Port wsdlport)
        {

            this.endpoint = endpoint;
            this.wsdlBinding = wsdlBinding;
            this.wsdlPort = wsdlport;
            this.contractContext = contractContext;

            this.wsdlOperationBindings = new Dictionary<OperationDescription, WsdlNS.OperationBinding>();
            this.operationDescriptionBindings = new Dictionary<WsdlNS.OperationBinding, OperationDescription>();
            this.wsdlMessageBindings = new Dictionary<MessageDescription, WsdlNS.MessageBinding>();
            this.messageDescriptionBindings = new Dictionary<WsdlNS.MessageBinding, MessageDescription>();
            this.wsdlFaultBindings = new Dictionary<FaultDescription, WsdlNS.FaultBinding>();
            this.faultDescriptionBindings = new Dictionary<WsdlNS.FaultBinding, FaultDescription>();
        }

        internal WsdlEndpointConversionContext(WsdlEndpointConversionContext bindingContext, ServiceEndpoint endpoint, WsdlNS.Port wsdlport)
        {

            this.endpoint = endpoint;
            this.wsdlBinding = bindingContext.WsdlBinding;
            this.wsdlPort = wsdlport;
            this.contractContext = bindingContext.contractContext;

            this.wsdlOperationBindings = bindingContext.wsdlOperationBindings;
            this.operationDescriptionBindings = bindingContext.operationDescriptionBindings;
            this.wsdlMessageBindings = bindingContext.wsdlMessageBindings;
            this.messageDescriptionBindings = bindingContext.messageDescriptionBindings;
            this.wsdlFaultBindings = bindingContext.wsdlFaultBindings;
            this.faultDescriptionBindings = bindingContext.faultDescriptionBindings;
        }

        internal IEnumerable<IWsdlExportExtension> ExportExtensions
        {
            get
            {
                foreach (IWsdlExportExtension extension in endpoint.Behaviors.FindAll<IWsdlExportExtension>())
                {
                    yield return extension;
                }

                foreach (IWsdlExportExtension extension in endpoint.Binding.CreateBindingElements().FindAll<IWsdlExportExtension>())
                {
                    yield return extension;
                }

                foreach (IWsdlExportExtension extension in endpoint.Contract.Behaviors.FindAll<IWsdlExportExtension>())
                {
                    yield return extension;
                }

                foreach (OperationDescription operation in endpoint.Contract.Operations)
                {
                    if (!WsdlExporter.OperationIsExportable(operation))
                    {
                        continue;
                    }

                    // In 3.0SP1, the DCSOB and XSOB were moved from before to after the custom behaviors.  For
                    // IWsdlExportExtension compat, run them in the pre-SP1 order.
                    // TEF QFE 367607
                    Collection<IWsdlExportExtension> extensions = operation.Behaviors.FindAll<IWsdlExportExtension>();
                    for (int i = 0; i < extensions.Count;)
                    {
                        if (WsdlExporter.IsBuiltInOperationBehavior(extensions[i]))
                        {
                            yield return extensions[i];
                            extensions.RemoveAt(i);
                        }
                        else
                        {
                            i++;
                        }
                    }
                    foreach (IWsdlExportExtension extension in extensions)
                    {
                        yield return extension;
                    }
                }
            }
        }

        public ServiceEndpoint Endpoint { get { return endpoint; } }
        public WsdlNS.Binding WsdlBinding { get { return wsdlBinding; } }
        public WsdlNS.Port WsdlPort { get { return wsdlPort; } }
        public WsdlContractConversionContext ContractConversionContext { get { return contractContext; } }

        public WsdlNS.OperationBinding GetOperationBinding(OperationDescription operation)
        {
            return this.wsdlOperationBindings[operation];
        }

        public WsdlNS.MessageBinding GetMessageBinding(MessageDescription message)
        {
            return this.wsdlMessageBindings[message];
        }

        public WsdlNS.FaultBinding GetFaultBinding(FaultDescription fault)
        {
            return this.wsdlFaultBindings[fault];
        }

        public OperationDescription GetOperationDescription(WsdlNS.OperationBinding operationBinding)
        {
            return this.operationDescriptionBindings[operationBinding];
        }

        public MessageDescription GetMessageDescription(WsdlNS.MessageBinding messageBinding)
        {
            return this.messageDescriptionBindings[messageBinding];
        }

        public FaultDescription GetFaultDescription(WsdlNS.FaultBinding faultBinding)
        {
            return this.faultDescriptionBindings[faultBinding];
        }

        // --------------------------------------------------------------------------------------------------

        internal void AddOperationBinding(OperationDescription operationDescription, WsdlNS.OperationBinding wsdlOperationBinding)
        {
            this.wsdlOperationBindings.Add(operationDescription, wsdlOperationBinding);
            this.operationDescriptionBindings.Add(wsdlOperationBinding, operationDescription);
        }

        internal void AddMessageBinding(MessageDescription messageDescription, WsdlNS.MessageBinding wsdlMessageBinding)
        {
            this.wsdlMessageBindings.Add(messageDescription, wsdlMessageBinding);
            this.messageDescriptionBindings.Add(wsdlMessageBinding, messageDescription);
        }

        internal void AddFaultBinding(FaultDescription faultDescription, WsdlNS.FaultBinding wsdlFaultBinding)
        {
            this.wsdlFaultBindings.Add(faultDescription, wsdlFaultBinding);
            this.faultDescriptionBindings.Add(wsdlFaultBinding, faultDescription);
        }
    }

}