/
ServiceDescriptions.cs
141 lines (116 loc) · 4.59 KB
/
ServiceDescriptions.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
132
133
134
135
136
137
138
139
140
141
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Xml;
namespace System.Web.Services.Description
{
public sealed class ServiceDescriptionCollection : ServiceDescriptionBaseCollection {
public ServiceDescriptionCollection() : base(null) { }
public ServiceDescription this[int index] {
get { return (ServiceDescription)List[index]; }
set { List[index] = value; }
}
public ServiceDescription this[string ns] {
get { return (ServiceDescription)Table[ns]; }
}
public int Add(ServiceDescription serviceDescription) {
return List.Add(serviceDescription);
}
public void Insert(int index, ServiceDescription serviceDescription) {
List.Insert(index, serviceDescription);
}
public int IndexOf(ServiceDescription serviceDescription) {
return List.IndexOf(serviceDescription);
}
public bool Contains(ServiceDescription serviceDescription) {
return List.Contains(serviceDescription);
}
public void Remove(ServiceDescription serviceDescription) {
List.Remove(serviceDescription);
}
public void CopyTo(ServiceDescription[] array, int index) {
List.CopyTo(array, index);
}
protected override string GetKey(object value) {
string ns = ((ServiceDescription)value).TargetNamespace;
if (ns == null)
{
return string.Empty;
}
return ns;
}
private Exception ItemNotFound(XmlQualifiedName name, string type) {
return new Exception(SR.Format(SR.WebDescriptionMissingItem, type, name.Name, name.Namespace));
}
public Message GetMessage(XmlQualifiedName name) {
ServiceDescription sd = GetServiceDescription(name);
Message message = null;
while (message == null && sd != null) {
message = sd.Messages[name.Name];
sd = sd.Next;
}
if (message == null)
{
throw ItemNotFound(name, "message");
}
return message;
}
public PortType GetPortType(XmlQualifiedName name) {
ServiceDescription sd = GetServiceDescription(name);
PortType portType = null;
while (portType == null && sd != null) {
portType = sd.PortTypes[name.Name];
sd = sd.Next;
}
if (portType == null)
{
throw ItemNotFound(name, "message");
}
return portType;
}
public Service GetService(XmlQualifiedName name) {
ServiceDescription sd = GetServiceDescription(name);
Service service = null;
while (service == null && sd != null) {
service = sd.Services[name.Name];
sd = sd.Next;
}
if (service == null)
{
throw ItemNotFound(name, "service");
}
return service;
}
public Binding GetBinding(XmlQualifiedName name) {
ServiceDescription sd = GetServiceDescription(name);
Binding binding = null;
while (binding == null && sd != null) {
binding = sd.Bindings[name.Name];
sd = sd.Next;
}
if (binding == null)
{
throw ItemNotFound(name, nameof(binding));
}
return binding;
}
private ServiceDescription GetServiceDescription(XmlQualifiedName name) {
ServiceDescription serviceDescription = this[name.Namespace];
if (serviceDescription == null) {
throw new ArgumentException(SR.Format(SR.WebDescriptionMissing, name.ToString(), name.Namespace), nameof(name));
}
return serviceDescription;
}
protected override void SetParent(object value, object parent) {
((ServiceDescription)value).SetParent((ServiceDescriptionCollection)parent);
}
protected override void OnInsertComplete(int index, object value) {
string key = GetKey(value);
if (key != null) {
ServiceDescription item = (ServiceDescription)Table[key];
((ServiceDescription)value).Next = (ServiceDescription)Table[key];
Table[key] = value;
}
SetParent(value, this);
}
}
}