X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.ServiceModel%2FSystem.ServiceModel.Channels%2FMessageHeaders.cs;h=c08ef8697dd13e5cba749f5e94fc573d69450439;hb=3fd54893bc792eee42164bfb605b418105a92f92;hp=6b56c88d59f2ffdc948fbdc284bb75f2505c5c9f;hpb=0717f141b92db56481cc09af70c026d7ffad8921;p=mono.git diff --git a/mcs/class/System.ServiceModel/System.ServiceModel.Channels/MessageHeaders.cs b/mcs/class/System.ServiceModel/System.ServiceModel.Channels/MessageHeaders.cs index 6b56c88d59f..c08ef8697dd 100644 --- a/mcs/class/System.ServiceModel/System.ServiceModel.Channels/MessageHeaders.cs +++ b/mcs/class/System.ServiceModel/System.ServiceModel.Channels/MessageHeaders.cs @@ -37,8 +37,6 @@ namespace System.ServiceModel.Channels { public sealed class MessageHeaders : IEnumerable, IEnumerable { - static string [] empty_strings = new string [0]; - static readonly XmlReaderSettings reader_settings; static MessageHeaders () @@ -74,9 +72,9 @@ namespace System.ServiceModel.Channels l.Add (header); } - public void CopyHeaderFrom (Message m, int index) + public void CopyHeaderFrom (Message message, int headerIndex) { - CopyHeaderFrom (m.Headers, index); + CopyHeaderFrom (message.Headers, headerIndex); } public void Clear () @@ -84,25 +82,25 @@ namespace System.ServiceModel.Channels l.Clear (); } - public void CopyHeaderFrom (MessageHeaders headers, int index) + public void CopyHeaderFrom (MessageHeaders collection, int headerIndex) { - l.Add (headers [index]); + l.Add (collection [headerIndex]); } - public void CopyHeadersFrom (Message m) + public void CopyHeadersFrom (Message message) { - CopyHeadersFrom (m.Headers); + CopyHeadersFrom (message.Headers); } - public void CopyHeadersFrom (MessageHeaders headers) + public void CopyHeadersFrom (MessageHeaders collection) { - foreach (MessageHeaderInfo h in headers) + foreach (MessageHeaderInfo h in collection) l.Add (h); } - public void CopyTo (MessageHeaderInfo [] dst, int index) + public void CopyTo (MessageHeaderInfo [] array, int index) { - l.CopyTo (dst, index); + l.CopyTo (array, index); } public int FindHeader (string name, string ns) @@ -180,7 +178,7 @@ namespace System.ServiceModel.Channels public T GetHeader (string name, string ns) { - return GetHeader (name, ns, empty_strings); + return GetHeader (name, ns, (string []) null); } public T GetHeader (string name, string ns, params string [] actors) @@ -188,7 +186,7 @@ namespace System.ServiceModel.Channels int idx = FindHeader (name, ns, actors); if (idx == -1) - throw new MessageHeaderException (String.Format ("Header '{0}:{1}' was not found for the argument actors: {2}", ns, name, String.Join (",", actors))); + throw new MessageHeaderException (String.Format ("Header '{0}:{1}' was not found for the argument actors: {2}", ns, name, actors == null ? "(null)" : String.Join (",", actors))); return GetHeader (idx); } @@ -205,15 +203,15 @@ namespace System.ServiceModel.Channels return GetHeader (idx, serializer); } - public XmlDictionaryReader GetReaderAtHeader (int index) + public XmlDictionaryReader GetReaderAtHeader (int headerIndex) { - if (index >= l.Count) - throw new ArgumentOutOfRangeException (String.Format ("Index is out of range. Current header count is {0}", index)); - MessageHeader item = (MessageHeader) l [index]; + if (headerIndex >= l.Count) + throw new ArgumentOutOfRangeException (String.Format ("Index is out of range. Current header count is {0}", l.Count)); + MessageHeader item = (MessageHeader) l [headerIndex]; XmlReader reader = - item is MessageHeader.RawMessageHeader ? - ((MessageHeader.RawMessageHeader) item).CreateReader () : + item is MessageHeader.XmlMessageHeader ? + ((MessageHeader.XmlMessageHeader) item).CreateReader () : XmlReader.Create ( new StringReader (item.ToString ()), reader_settings); @@ -233,9 +231,9 @@ namespace System.ServiceModel.Channels throw new NotImplementedException (); } - public void Insert (int index, MessageHeader header) + public void Insert (int headerIndex, MessageHeader header) { - l.Insert (index, header); + l.Insert (headerIndex, header); } public void RemoveAll (string name, string ns) @@ -253,9 +251,9 @@ namespace System.ServiceModel.Channels l.RemoveAt (l.Count - 1); } - public void RemoveAt (int index) + public void RemoveAt (int headerIndex) { - l.RemoveAt (index); + l.RemoveAt (headerIndex); } IEnumerator IEnumerable.GetEnumerator () @@ -263,48 +261,48 @@ namespace System.ServiceModel.Channels return ((IEnumerable) l).GetEnumerator (); } - public void WriteHeader (int index, XmlDictionaryWriter writer) + public void WriteHeader (int headerIndex, XmlDictionaryWriter writer) { if (version.Envelope == EnvelopeVersion.None) return; - WriteStartHeader (index, writer); - WriteHeaderContents (index, writer); + WriteStartHeader (headerIndex, writer); + WriteHeaderContents (headerIndex, writer); writer.WriteEndElement (); } - public void WriteHeader (int index, XmlWriter writer) + public void WriteHeader (int headerIndex, XmlWriter writer) { - WriteHeader (index, XmlDictionaryWriter.CreateDictionaryWriter (writer)); + WriteHeader (headerIndex, XmlDictionaryWriter.CreateDictionaryWriter (writer)); } - public void WriteHeaderContents (int index, XmlDictionaryWriter writer) + public void WriteHeaderContents (int headerIndex, XmlDictionaryWriter writer) { - if (index > l.Count) - throw new ArgumentOutOfRangeException ("There is no header at position " + index + "."); + if (headerIndex > l.Count) + throw new ArgumentOutOfRangeException ("There is no header at position " + headerIndex + "."); - MessageHeader h = l [index] as MessageHeader; + MessageHeader h = l [headerIndex] as MessageHeader; h.WriteHeaderContents (writer, version); } - public void WriteHeaderContents (int index, XmlWriter writer) + public void WriteHeaderContents (int headerIndex, XmlWriter writer) { - WriteHeaderContents (index, XmlDictionaryWriter.CreateDictionaryWriter (writer)); + WriteHeaderContents (headerIndex, XmlDictionaryWriter.CreateDictionaryWriter (writer)); } - public void WriteStartHeader (int index, XmlDictionaryWriter writer) + public void WriteStartHeader (int headerIndex, XmlDictionaryWriter writer) { - if (index > l.Count) - throw new ArgumentOutOfRangeException ("There is no header at position " + index + "."); + if (headerIndex > l.Count) + throw new ArgumentOutOfRangeException ("There is no header at position " + headerIndex + "."); - MessageHeader h = l [index] as MessageHeader; + MessageHeader h = l [headerIndex] as MessageHeader; h.WriteStartHeader (writer, version); } - public void WriteStartHeader (int index, XmlWriter writer) + public void WriteStartHeader (int headerIndex, XmlWriter writer) { - WriteStartHeader (index, XmlDictionaryWriter.CreateDictionaryWriter (writer)); + WriteStartHeader (headerIndex, XmlDictionaryWriter.CreateDictionaryWriter (writer)); } public string Action { @@ -325,12 +323,11 @@ namespace System.ServiceModel.Channels void AddEndpointAddressHeader (string name, string ns, EndpointAddress address) { - RemoveAll ("FaultTo", Constants.WsaNamespace); if (address == null) return; if (MessageVersion.Addressing.Equals (AddressingVersion.WSAddressing10)) Add (MessageHeader.CreateHeader (name, ns, EndpointAddress10.FromEndpointAddress (address))); -#if !NET_2_1 +#if !MOBILE else if (MessageVersion.Addressing.Equals (AddressingVersion.WSAddressingAugust2004)) Add (MessageHeader.CreateHeader (name, ns, EndpointAddressAugust2004.FromEndpointAddress (address))); #endif @@ -340,10 +337,14 @@ namespace System.ServiceModel.Channels public EndpointAddress FaultTo { get { - int idx = FindHeader ("FaultTo", Constants.WsaNamespace); + int idx = FindHeader ("FaultTo", version.Addressing.Namespace); return idx < 0 ? null : GetHeader (idx); } - set { AddEndpointAddressHeader ("FaultTo", Constants.WsaNamespace, value); } + set { + RemoveAll ("FaultTo", version.Addressing.Namespace); + if (value != null) + AddEndpointAddressHeader ("FaultTo", version.Addressing.Namespace, value); + } } public EndpointAddress From { @@ -351,7 +352,11 @@ namespace System.ServiceModel.Channels int idx = FindHeader ("From", version.Addressing.Namespace); return idx < 0 ? null : GetHeader (idx); } - set { AddEndpointAddressHeader ("From", Constants.WsaNamespace, value); } + set { + RemoveAll ("From", version.Addressing.Namespace); + if (value != null) + AddEndpointAddressHeader ("From", version.Addressing.Namespace, value); + } } public MessageHeaderInfo this [int index] { @@ -360,16 +365,16 @@ namespace System.ServiceModel.Channels public UniqueId MessageId { get { - int idx = FindHeader ("MessageID", Constants.WsaNamespace); + int idx = FindHeader ("MessageID", version.Addressing.Namespace); return idx < 0 ? null : new UniqueId (GetHeader (idx)); } set { if (version.Addressing == AddressingVersion.None && value != null) throw new InvalidOperationException ("WS-Addressing header is not allowed for AddressingVersion.None"); - RemoveAll ("MessageID", Constants.WsaNamespace); + RemoveAll ("MessageID", version.Addressing.Namespace); if (value != null) - Add (MessageHeader.CreateHeader ("MessageID", Constants.WsaNamespace, value)); + Add (MessageHeader.CreateHeader ("MessageID", version.Addressing.Namespace, value)); } } @@ -377,26 +382,30 @@ namespace System.ServiceModel.Channels public UniqueId RelatesTo { get { - int idx = FindHeader ("RelatesTo", Constants.WsaNamespace); + int idx = FindHeader ("RelatesTo", version.Addressing.Namespace); return idx < 0 ? null : new UniqueId (GetHeader (idx)); } set { if (version.Addressing == AddressingVersion.None && value != null) throw new InvalidOperationException ("WS-Addressing header is not allowed for AddressingVersion.None"); - RemoveAll ("MessageID", Constants.WsaNamespace); + RemoveAll ("MessageID", version.Addressing.Namespace); if (value != null) - Add (MessageHeader.CreateHeader ("RelatesTo", Constants.WsaNamespace, value)); + Add (MessageHeader.CreateHeader ("RelatesTo", version.Addressing.Namespace, value)); } } public EndpointAddress ReplyTo { get { - int idx = FindHeader ("ReplyTo", Constants.WsaNamespace); + int idx = FindHeader ("ReplyTo", version.Addressing.Namespace); return idx < 0 ? null : GetHeader (idx); } - set { AddEndpointAddressHeader ("ReplyTo", Constants.WsaNamespace, value); } + set { + RemoveAll ("ReplyTo", version.Addressing.Namespace); + if (value != null) + AddEndpointAddressHeader ("ReplyTo", version.Addressing.Namespace, value); + } } public Uri To {