Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Discovery / System / ServiceModel / Discovery / SerializationUtility.cs / 1305376 / SerializationUtility.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.ServiceModel.Discovery { using System; using System.Collections.ObjectModel; using System.Globalization; using System.Runtime; using System.Text; using System.Xml; using SR2 = System.ServiceModel.Discovery.SR; static class SerializationUtility { static char[] whiteSpaceChars = new char[] { ' ', '\t', '\n', '\r' }; public static XmlQualifiedName ParseQName(string prefixedQName, XmlReader reader) { Fx.Assert(prefixedQName != null, "The prefixedQName must be non null."); Fx.Assert(reader != null, "The reader must be non null."); int index = prefixedQName.IndexOf(':'); string ns; string localname; if (index != -1) { string prefix = prefixedQName.Substring(0, index); ns = reader.LookupNamespace(prefix); if (ns == null) { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlQNamePrefixNotDefined(prefix, prefixedQName))); } localname = prefixedQName.Substring(index + 1); if (localname == string.Empty) { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlQNameLocalnameNotDefined(prefixedQName))); } } else { ns = string.Empty; localname = prefixedQName; } localname = XmlConvert.DecodeName(localname); return new XmlQualifiedName(localname, ns); } public static void ParseQNameList(string listOfQNamesAsString, CollectionqNameCollection, XmlReader reader) { Fx.Assert(listOfQNamesAsString != null, "The listOfQNamesAsString must be non null."); Fx.Assert(qNameCollection != null, "The qNameCollection must be non null."); Fx.Assert(reader != null, "The reader must be non null."); string[] prefixedQNames = listOfQNamesAsString.Split(whiteSpaceChars, StringSplitOptions.RemoveEmptyEntries); if (prefixedQNames.Length > 0) { for (int i = 0; i < prefixedQNames.Length; i++) { qNameCollection.Add(ParseQName(prefixedQNames[i], reader)); } } } public static void ParseUriList(string listOfUrisAsString, Collection uriCollection, UriKind uriKind) { Fx.Assert(listOfUrisAsString != null, "The listOfUrisAsString must be non null."); Fx.Assert(uriCollection != null, "The uriCollection must be non null."); string[] uriStrings = listOfUrisAsString.Split(whiteSpaceChars, StringSplitOptions.RemoveEmptyEntries); if (uriStrings.Length > 0) { for (int i = 0; i < uriStrings.Length; i++) { try { uriCollection.Add(new Uri(uriStrings[i], uriKind)); } catch (FormatException fe) { if (uriKind == UriKind.Absolute) { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlAbsoluteUriFormatError(uriStrings[i]), fe)); } else { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlUriFormatError(uriStrings[i]), fe)); } } } } } public static long ReadUInt(string uintString, string notFoundExceptionString, string exceptionString) { long result; if (uintString == null) { throw FxTrace.Exception.AsError(new XmlException(notFoundExceptionString)); } try { result = XmlConvert.ToUInt32(uintString); } catch (FormatException fe) { throw FxTrace.Exception.AsError(new XmlException(exceptionString, fe)); } catch (OverflowException oe) { throw FxTrace.Exception.AsError(new XmlException(exceptionString, oe)); } return result; } static void PrepareQNameString(StringBuilder listOfQNamesString, ref bool emptyNsDeclared, ref int prefixCount, XmlWriter writer, XmlQualifiedName qname) { string prefix; string encodedLocalName = XmlConvert.EncodeLocalName(qname.Name.Trim()); if (qname.Namespace.Length == 0) { if (!emptyNsDeclared) { writer.WriteAttributeString("xmlns", string.Empty, null, string.Empty); emptyNsDeclared = true; } prefix = null; } else { prefix = writer.LookupPrefix(qname.Namespace); if (prefix == null) { prefix = "dp" + prefixCount++; writer.WriteAttributeString("xmlns", prefix, null, qname.Namespace); } } if (!string.IsNullOrEmpty(prefix)) { listOfQNamesString.AppendFormat(CultureInfo.InvariantCulture, "{0}:{1}", prefix, encodedLocalName); } else { listOfQNamesString.AppendFormat(CultureInfo.InvariantCulture, "{0}", encodedLocalName); } } public static void WriteQName(XmlWriter writer, XmlQualifiedName qname) { Fx.Assert(writer != null, "The writer must be non null."); Fx.Assert(qname != null, "The qnames must be non null."); StringBuilder qNameString = new StringBuilder(); int prefixCount = 0; bool emptyNsDeclared = false; PrepareQNameString(qNameString, ref emptyNsDeclared, ref prefixCount, writer, qname); writer.WriteString(qNameString.ToString()); } public static void WriteListOfQNames(XmlWriter writer, Collection qnames) { Fx.Assert(writer != null, "The writer must be non null."); Fx.Assert(qnames != null, "The qnames must be non null."); int prefixCount = 0; bool emptyNsDeclared = false; StringBuilder listOfQNamesString = new StringBuilder(); foreach (XmlQualifiedName qname in qnames) { if (listOfQNamesString.Length != 0) { listOfQNamesString.Append(' '); } PrepareQNameString(listOfQNamesString, ref emptyNsDeclared, ref prefixCount, writer, qname); } writer.WriteString(listOfQNamesString.ToString()); } public static void WriteListOfUris(XmlWriter writer, Collection uris) { Fx.Assert(writer != null, "The writer must be non null."); Fx.Assert(uris != null, "The uris must be non null."); if (uris.Count > 0) { for (int i = 0; i < uris.Count - 1; i++) { writer.WriteString(uris[i].GetComponents(UriComponents.SerializationInfoString, UriFormat.UriEscaped)); writer.WriteWhitespace(" "); } writer.WriteString(uris[uris.Count - 1].GetComponents(UriComponents.SerializationInfoString, UriFormat.UriEscaped)); } } public static int ReadMaxResults(XmlReader reader) { int maxResults = int.MaxValue; if (reader.IsEmptyElement) { reader.Read(); } else { reader.ReadStartElement(); maxResults = reader.ReadContentAsInt(); if (maxResults <= 0) { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlMaxResultsLessThanZero(maxResults))); } reader.ReadEndElement(); } return maxResults; } public static TimeSpan ReadDuration(XmlReader reader) { TimeSpan timeout = TimeSpan.MaxValue; if (reader.IsEmptyElement) { reader.Read(); } else { reader.ReadStartElement(); string timeoutString = reader.ReadString(); timeout = SerializationUtility.ReadTimespan(timeoutString, SR2.DiscoveryXmlDurationDeserializationError(timeoutString)); if (timeout <= TimeSpan.Zero) { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlDurationLessThanZero(timeout)));; } reader.ReadEndElement(); } return timeout; } public static TimeSpan ReadTimespan(string timespanString, string exceptionString) { TimeSpan result; try { result = XmlConvert.ToTimeSpan(timespanString); } catch (FormatException fe) { throw FxTrace.Exception.AsError(new XmlException(exceptionString, fe)); } catch (OverflowException oe) { throw FxTrace.Exception.AsError(new XmlException(exceptionString, oe)); } return result; } public static EndpointAddress ReadEndpointAddress(DiscoveryVersion discoveryVersion, XmlReader reader) { Fx.Assert(discoveryVersion != null, "The discoveryVersion must be non null"); Fx.Assert(reader != null, "The reader must be non null"); if (discoveryVersion == DiscoveryVersion.WSDiscoveryApril2005 || discoveryVersion == DiscoveryVersion.WSDiscoveryCD1) { EndpointAddressAugust2004 endpoint = discoveryVersion.Implementation.EprSerializer.ReadObject(reader) as EndpointAddressAugust2004; if (endpoint == null) { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlEndpointNull)); } return endpoint.ToEndpointAddress(); } else if (discoveryVersion == DiscoveryVersion.WSDiscovery11) { EndpointAddress10 endpoint = discoveryVersion.Implementation.EprSerializer.ReadObject(reader) as EndpointAddress10; if (endpoint == null) { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlEndpointNull)); } return endpoint.ToEndpointAddress(); } else { Fx.Assert("The discoveryVersion parameter cannot be null."); return null; } } public static void ReadContractTypeNames(Collection contractTypeNames, XmlReader reader) { if (reader.IsEmptyElement) { reader.Read(); } else { reader.ReadStartElement(); string listOfQNamesAsStr = reader.ReadString(); if (!string.IsNullOrEmpty(listOfQNamesAsStr)) { SerializationUtility.ParseQNameList(listOfQNamesAsStr, contractTypeNames, reader); } reader.ReadEndElement(); } } public static Uri ReadScopes(Collection scopes, XmlReader reader) { Uri scopeMatchBy = null; if (reader.HasAttributes) { while (reader.MoveToNextAttribute()) { if ((reader.NamespaceURI.Length == 0) && (reader.Name.Equals(ProtocolStrings.SchemaNames.MatchByAttribute))) { string scopeMatchByStr = reader.Value; try { scopeMatchBy = new Uri(scopeMatchByStr, UriKind.RelativeOrAbsolute); } catch (FormatException fe) { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlUriFormatError(scopeMatchByStr), fe)); } break; } } reader.MoveToElement(); } if (reader.IsEmptyElement) { reader.Read(); } else { reader.ReadStartElement(); string listOfUrisAsString = reader.ReadString(); if (!string.IsNullOrEmpty(listOfUrisAsString)) { SerializationUtility.ParseUriList(listOfUrisAsString, scopes, UriKind.Absolute); } reader.ReadEndElement(); } return scopeMatchBy; } public static void ReadListenUris(Collection listenUris, XmlReader reader) { if (reader.IsEmptyElement) { reader.Read(); } else { reader.ReadStartElement(); string listOfUrisAsString = reader.ReadString(); if (!string.IsNullOrEmpty(listOfUrisAsString)) { SerializationUtility.ParseUriList(listOfUrisAsString, listenUris, UriKind.RelativeOrAbsolute); } reader.ReadEndElement(); } } public static int ReadMetadataVersion(XmlReader reader) { reader.ReadStartElement(); int metadataVersion = reader.ReadContentAsInt(); if (metadataVersion < 0) { throw FxTrace.Exception.AsError(new XmlException(SR2.DiscoveryXmlMetadataVersionLessThanZero(metadataVersion))); } reader.ReadEndElement(); return metadataVersion; } public static void WriteEndPointAddress(DiscoveryVersion discoveryVersion, EndpointAddress endpointAddress, XmlWriter writer) { Fx.Assert(discoveryVersion != null, "The discoveryVersion must be non null"); Fx.Assert(writer != null, "The writer must be non null"); if (discoveryVersion == DiscoveryVersion.WSDiscoveryApril2005 || discoveryVersion == DiscoveryVersion.WSDiscoveryCD1) { EndpointAddressAugust2004 endpoint = EndpointAddressAugust2004.FromEndpointAddress(endpointAddress); discoveryVersion.Implementation.EprSerializer.WriteObject(writer, endpoint); } else if (discoveryVersion == DiscoveryVersion.WSDiscovery11) { EndpointAddress10 endpoint = EndpointAddress10.FromEndpointAddress(endpointAddress); discoveryVersion.Implementation.EprSerializer.WriteObject(writer, endpoint); } else { Fx.Assert("The discoveryVersion parameter cannot be null."); } } public static void WriteContractTypeNames(DiscoveryVersion discoveryVersion, Collection contractTypeNames, XmlWriter writer) { if ((contractTypeNames != null) && (contractTypeNames.Count > 0)) { // using the prefix here allows us to redefine the empty namespace // for serializing the QNames is required. writer.WriteStartElement( ProtocolStrings.SchemaNames.DefaultPrefix, ProtocolStrings.SchemaNames.TypesElement, discoveryVersion.Namespace); SerializationUtility.WriteListOfQNames(writer, contractTypeNames); writer.WriteEndElement(); } } public static void WriteScopes(DiscoveryVersion discoveryVersion, Collection scopes, Uri scopeMatchBy, XmlWriter writer) { bool writeScopes = true; if (scopes == null || scopes.Count == 0) { // If there are no scopes defined, we write the Scopes section only if matchBy contract is None. writeScopes = (scopeMatchBy == FindCriteria.ScopeMatchByNone); } if (writeScopes) { writer.WriteStartElement(ProtocolStrings.SchemaNames.ScopesElement, discoveryVersion.Namespace); if (scopeMatchBy != null) { Uri versionDependentScopeMatchBy = discoveryVersion.Implementation.ToVersionDependentScopeMatchBy(scopeMatchBy); writer.WriteAttributeString( ProtocolStrings.SchemaNames.MatchByAttribute, string.Empty, versionDependentScopeMatchBy.GetComponents(UriComponents.SerializationInfoString, UriFormat.UriEscaped)); } if (scopes != null) { SerializationUtility.WriteListOfUris(writer, scopes); } writer.WriteEndElement(); } } public static void WriteListenUris(DiscoveryVersion discoveryVersion, Collection listenUris, XmlWriter writer) { if ((listenUris != null) && (listenUris.Count > 0)) { writer.WriteStartElement(ProtocolStrings.SchemaNames.XAddrsElement, discoveryVersion.Namespace); SerializationUtility.WriteListOfUris(writer, listenUris); writer.WriteEndElement(); } } public static void WriteMetadataVersion(DiscoveryVersion discoveryVersion, int metadataVersion, XmlWriter writer) { writer.WriteStartElement(ProtocolStrings.SchemaNames.MetadataVersionElement, discoveryVersion.Namespace); writer.WriteValue(metadataVersion); writer.WriteEndElement(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DesignerDataStoredProcedure.cs
- NonSerializedAttribute.cs
- SymmetricCryptoHandle.cs
- ComponentDispatcher.cs
- UnlockCardRequest.cs
- CategoryAttribute.cs
- PackagingUtilities.cs
- WindowsIdentity.cs
- ReadOnlyDataSource.cs
- DataGridViewRowCollection.cs
- controlskin.cs
- BamlBinaryReader.cs
- GeometryValueSerializer.cs
- _SecureChannel.cs
- EmbeddedMailObjectCollectionEditor.cs
- reliableinputsessionchannel.cs
- WindowsButton.cs
- SQLDateTime.cs
- DataGridViewButtonColumn.cs
- StringPropertyBuilder.cs
- AudioFormatConverter.cs
- LayoutEditorPart.cs
- FileDialog.cs
- FieldAccessException.cs
- TextTreeUndo.cs
- QilTargetType.cs
- StandardToolWindows.cs
- ChineseLunisolarCalendar.cs
- PkcsMisc.cs
- CleanUpVirtualizedItemEventArgs.cs
- BackStopAuthenticationModule.cs
- DataRow.cs
- ContextStack.cs
- XPathSelectionIterator.cs
- ConfigurationValues.cs
- Internal.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- externdll.cs
- SoapSchemaExporter.cs
- DbInsertCommandTree.cs
- ProviderUtil.cs
- AdornerDecorator.cs
- DataGridViewCellPaintingEventArgs.cs
- RootBrowserWindow.cs
- RequestContext.cs
- MissingMemberException.cs
- ClientSponsor.cs
- TextEditorSpelling.cs
- ExpressionLexer.cs
- Transactions.cs
- EntityDataSource.cs
- WebPartCollection.cs
- XmlRawWriterWrapper.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- Compiler.cs
- TableAdapterManagerNameHandler.cs
- AstTree.cs
- CFStream.cs
- CodeValidator.cs
- SafeTimerHandle.cs
- SqlGatherProducedAliases.cs
- DetailsViewDeletedEventArgs.cs
- TextBox.cs
- LocationSectionRecord.cs
- TextCompositionManager.cs
- ConnectionsZone.cs
- EpmHelper.cs
- WFItemsToSpacerVisibility.cs
- SimpleType.cs
- WebPartEditorOkVerb.cs
- RemoteHelper.cs
- ConnectionsZone.cs
- TypeConverters.cs
- PartialList.cs
- FileDetails.cs
- ReadOnlyAttribute.cs
- HMACRIPEMD160.cs
- XsltLibrary.cs
- NamedPermissionSet.cs
- Triangle.cs
- SectionVisual.cs
- RSAOAEPKeyExchangeDeformatter.cs
- InlineCollection.cs
- BypassElement.cs
- Stack.cs
- X509UI.cs
- SmiEventStream.cs
- FileUpload.cs
- ClientConfigPaths.cs
- SplayTreeNode.cs
- Int64AnimationBase.cs
- PrimitiveXmlSerializers.cs
- StringFunctions.cs
- WebPartPersonalization.cs
- parserscommon.cs
- SqlProfileProvider.cs
- HierarchicalDataTemplate.cs
- StringKeyFrameCollection.cs
- ManagementEventArgs.cs
- TimerElapsedEvenArgs.cs