1 // 2 // EndpointAddressBuilder.cs 3 // 4 // Author: 5 // Atsushi Enomoto <atsushi@ximian.com> 6 // 7 // Copyright (C) 2006 Novell, Inc. http://www.novell.com 8 // 9 // Permission is hereby granted, free of charge, to any person obtaining 10 // a copy of this software and associated documentation files (the 11 // "Software"), to deal in the Software without restriction, including 12 // without limitation the rights to use, copy, modify, merge, publish, 13 // distribute, sublicense, and/or sell copies of the Software, and to 14 // permit persons to whom the Software is furnished to do so, subject to 15 // the following conditions: 16 // 17 // The above copyright notice and this permission notice shall be 18 // included in all copies or substantial portions of the Software. 19 // 20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 27 // 28 using System; 29 using System.Collections.ObjectModel; 30 using System.IO; 31 using System.Linq; 32 using System.Xml; 33 using System.ServiceModel.Channels; 34 35 namespace System.ServiceModel 36 { 37 public class EndpointAddressBuilder 38 { 39 Collection<AddressHeader> headers = new Collection<AddressHeader> (); 40 EndpointIdentity identity; 41 Uri uri; 42 string extension, metadata; 43 EndpointAddressBuilder()44 public EndpointAddressBuilder () 45 { 46 } 47 EndpointAddressBuilder(EndpointAddress address)48 public EndpointAddressBuilder (EndpointAddress address) 49 { 50 identity = address.Identity; 51 uri = address.Uri; 52 foreach (AddressHeader h in address.Headers) 53 headers.Add (h); 54 } 55 56 public Collection<AddressHeader> Headers { 57 get { return headers; } 58 } 59 60 public Uri Uri { 61 get { return uri; } 62 set { uri = value; } 63 } 64 65 public EndpointIdentity Identity { 66 get { return identity; } 67 set { identity = value; } 68 } 69 70 #if !MOBILE GetReaderAtExtensions()71 public XmlDictionaryReader GetReaderAtExtensions () 72 { 73 if (extension == null) 74 return null; 75 var r = XmlDictionaryReader.CreateDictionaryReader (XmlReader.Create (new StringReader (extension))); 76 r.MoveToContent (); 77 return r; 78 } 79 GetReaderAtMetadata()80 public XmlDictionaryReader GetReaderAtMetadata () 81 { 82 if (metadata == null) 83 return null; 84 var r = XmlDictionaryReader.CreateDictionaryReader (XmlReader.Create (new StringReader (metadata))); 85 r.MoveToContent (); 86 return r; 87 } 88 SetExtensionReader(XmlDictionaryReader reader)89 public void SetExtensionReader (XmlDictionaryReader reader) 90 { 91 if (reader == null) 92 extension = null; 93 else { 94 reader.MoveToContent (); 95 extension = reader.ReadOuterXml (); 96 } 97 } 98 SetMetadataReader(XmlDictionaryReader reader)99 public void SetMetadataReader (XmlDictionaryReader reader) 100 { 101 if (reader == null) 102 metadata = null; 103 else { 104 reader.MoveToContent (); 105 metadata = reader.ReadOuterXml (); 106 } 107 } 108 ToEndpointAddress()109 public EndpointAddress ToEndpointAddress () 110 { 111 return new EndpointAddress (uri, identity, 112 new AddressHeaderCollection (headers), GetReaderAtMetadata (), GetReaderAtExtensions ()); 113 } 114 #else ToEndpointAddress()115 public EndpointAddress ToEndpointAddress () 116 { 117 return new EndpointAddress (uri, headers.ToArray ()); 118 } 119 #endif 120 } 121 } 122