private static EndpointAddress ReadContents (
AddressingVersion addressingVersion, XmlReader reader)
{
Uri uri = null;
EndpointIdentity identity = null;
reader.MoveToContent ();
if (reader.LocalName == "Address" &&
reader.NamespaceURI == addressingVersion.Namespace &&
reader.NodeType == XmlNodeType.Element &&
!reader.IsEmptyElement)
uri = new Uri (reader.ReadElementContentAsString ());
else
throw new XmlException (String.Format (
"Expecting 'Address' from namespace '{0}', but found '{1}' from namespace '{2}'",
addressingVersion.Namespace, reader.LocalName, reader.NamespaceURI));
reader.MoveToContent ();
#if !NET_2_1
MetadataSet metadata = null;
if (reader.LocalName == "Metadata" &&
reader.NamespaceURI == addressingVersion.Namespace &&
!reader.IsEmptyElement) {
reader.Read ();
metadata = (MetadataSet) new XmlSerializer (typeof (MetadataSet)).Deserialize (reader);
reader.MoveToContent ();
reader.ReadEndElement ();
}
reader.MoveToContent ();
if (reader.LocalName == "Identity" &&
reader.NamespaceURI == Constants.WsaIdentityUri) {
// FIXME: implement
reader.Skip ();
}
#endif
if (addressingVersion == AddressingVersion.WSAddressing10 && uri == w3c_anonymous)
uri = anonymous_role;
#if NET_2_1
return new EndpointAddress (uri, identity);
#else
if (metadata == null)
return new EndpointAddress (uri, identity);
return new EndpointAddress (uri, identity,
AddressHeader.CreateAddressHeader (metadata));
#endif
}