/
CustomBinding.cs
131 lines (111 loc) · 4.18 KB
/
CustomBinding.cs
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
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Collections.Generic;
namespace System.ServiceModel.Channels
{
public class CustomBinding : Binding
{
public CustomBinding()
: base()
{
}
public CustomBinding(params BindingElement[] bindingElementsInTopDownChannelStackOrder)
: base()
{
if (bindingElementsInTopDownChannelStackOrder == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(bindingElementsInTopDownChannelStackOrder));
}
foreach (BindingElement element in bindingElementsInTopDownChannelStackOrder)
{
Elements.Add(element);
}
}
public CustomBinding(string name, string ns, params BindingElement[] bindingElementsInTopDownChannelStackOrder)
: base(name, ns)
{
if (bindingElementsInTopDownChannelStackOrder == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(bindingElementsInTopDownChannelStackOrder));
}
foreach (BindingElement element in bindingElementsInTopDownChannelStackOrder)
{
Elements.Add(element);
}
}
public CustomBinding(IEnumerable<BindingElement> bindingElementsInTopDownChannelStackOrder)
{
if (bindingElementsInTopDownChannelStackOrder == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(bindingElementsInTopDownChannelStackOrder));
}
foreach (BindingElement element in bindingElementsInTopDownChannelStackOrder)
{
Elements.Add(element);
}
}
internal CustomBinding(BindingElementCollection bindingElements)
: base()
{
if (bindingElements == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(bindingElements));
}
for (int i = 0; i < bindingElements.Count; i++)
{
Elements.Add(bindingElements[i]);
}
}
public CustomBinding(Binding binding)
: this(binding, SafeCreateBindingElements(binding))
{
}
private static BindingElementCollection SafeCreateBindingElements(Binding binding)
{
if (binding == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(binding));
}
return binding.CreateBindingElements();
}
internal CustomBinding(Binding binding, BindingElementCollection elements)
{
if (binding == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(binding));
}
if (elements == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(elements));
}
Name = binding.Name;
Namespace = binding.Namespace;
CloseTimeout = binding.CloseTimeout;
OpenTimeout = binding.OpenTimeout;
ReceiveTimeout = binding.ReceiveTimeout;
SendTimeout = binding.SendTimeout;
for (int i = 0; i < elements.Count; i++)
{
Elements.Add(elements[i]);
}
}
public BindingElementCollection Elements { get; } = new BindingElementCollection();
public override BindingElementCollection CreateBindingElements()
{
return Elements.Clone();
}
public override string Scheme
{
get
{
TransportBindingElement transport = Elements.Find<TransportBindingElement>();
if (transport == null)
{
return String.Empty;
}
return transport.Scheme;
}
}
}
}