2 // System.Web.Services.Description.OperationMessageCollection.cs
\r
5 // Tim Coleman (tim@timcoleman.com)
\r
7 // Copyright (C) Tim Coleman, 2002
\r
10 using System.Web.Services;
\r
12 namespace System.Web.Services.Description {
\r
13 public sealed class OperationMessageCollection : ServiceDescriptionBaseCollection {
\r
15 #region Constructors
\r
17 internal OperationMessageCollection (Operation operation)
\r
22 #endregion // Constructors
\r
26 public OperationFlow Flow {
\r
30 if (this[0] is OperationInput)
\r
31 return OperationFlow.OneWay;
\r
33 return OperationFlow.Notification;
\r
35 if (this[0] is OperationInput)
\r
36 return OperationFlow.RequestResponse;
\r
38 return OperationFlow.SolicitResponse;
\r
40 return OperationFlow.None;
\r
44 public OperationInput Input {
\r
46 foreach (object message in List)
\r
47 if (message is OperationInput)
\r
48 return (OperationInput) message;
\r
53 public OperationMessage this [int index] {
\r
54 get { return (OperationMessage) List[index]; }
\r
55 set { List[index] = value; }
\r
58 public OperationOutput Output {
\r
60 foreach (object message in List)
\r
61 if (message is OperationOutput)
\r
62 return (OperationOutput) message;
\r
67 #endregion // Properties
\r
71 public int Add (OperationMessage operationMessage)
\r
73 Insert (Count, operationMessage);
\r
77 public bool Contains (OperationMessage operationMessage)
\r
79 return List.Contains (operationMessage);
\r
82 public void CopyTo (OperationMessage[] array, int index)
\r
84 List.CopyTo (array, index);
\r
87 public int IndexOf (OperationMessage operationMessage)
\r
89 return List.IndexOf (operationMessage);
\r
92 public void Insert (int index, OperationMessage operationMessage)
\r
94 List.Insert (index, operationMessage);
\r
97 protected override void OnInsert (int index, object value)
\r
99 if (Count > 2 || value.GetType () == this [0].GetType ())
\r
100 throw new InvalidOperationException ("The operation object can only contain one input and one output message.");
\r
103 protected override void OnSet (int index, object oldValue, object newValue)
\r
105 if (oldValue.GetType () != newValue.GetType ())
\r
106 throw new InvalidOperationException ("The message types of the old and new value are not the same.");
\r
107 base.OnSet (index, oldValue, newValue);
\r
110 protected override void OnValidate (object value)
\r
113 throw new NullReferenceException ("The message object is a null reference.");
\r
114 if (!(value is OperationInput || value is OperationOutput))
\r
115 throw new ArgumentException ("The message object is not an input or an output message.");
\r
118 public void Remove (OperationMessage operationMessage)
\r
120 List.Remove (operationMessage);
\r
123 protected override void SetParent (object value, object parent)
\r
125 ((OperationMessage) value).SetParent ((Operation) parent);
\r
128 #endregion // Methods
\r