// // EndpointAddressBuilder.cs // // Author: // Atsushi Enomoto // // Copyright (C) 2006 Novell, Inc. http://www.novell.com // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // using System; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Xml; using System.ServiceModel.Channels; namespace System.ServiceModel { public class EndpointAddressBuilder { Collection headers = new Collection (); EndpointIdentity identity; Uri uri; string extension, metadata; public EndpointAddressBuilder () { } public EndpointAddressBuilder (EndpointAddress address) { identity = address.Identity; uri = address.Uri; foreach (AddressHeader h in address.Headers) headers.Add (h); } public Collection Headers { get { return headers; } } public Uri Uri { get { return uri; } set { uri = value; } } #if !NET_2_1 public EndpointIdentity Identity { get { return identity; } set { identity = value; } } public XmlDictionaryReader GetReaderAtExtensions () { if (extension == null) return null; var r = XmlDictionaryReader.CreateDictionaryReader (XmlReader.Create (new StringReader (extension))); r.MoveToContent (); return r; } public XmlDictionaryReader GetReaderAtMetadata () { if (metadata == null) return null; var r = XmlDictionaryReader.CreateDictionaryReader (XmlReader.Create (new StringReader (metadata))); r.MoveToContent (); return r; } public void SetExtensionReader (XmlDictionaryReader reader) { if (reader == null) extension = null; else { reader.MoveToContent (); extension = reader.ReadOuterXml (); } } public void SetMetadataReader (XmlDictionaryReader reader) { if (reader == null) metadata = null; else { reader.MoveToContent (); metadata = reader.ReadOuterXml (); } } public EndpointAddress ToEndpointAddress () { return new EndpointAddress (uri, identity, new AddressHeaderCollection (headers), GetReaderAtMetadata (), GetReaderAtExtensions ()); } #else public EndpointAddress ToEndpointAddress () { return new EndpointAddress (uri, headers.ToArray ()); } #endif } }