Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / MsmqUri.cs / 1 / MsmqUri.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Globalization; using System.Net; using System.ServiceModel; using System.Text; static class MsmqUri { static IAddressTranslator netMsmqAddressTranslator; static IAddressTranslator activeDirectoryAddressTranslator; static IAddressTranslator deadLetterQueueAddressTranslator; static IAddressTranslator srmpAddressTranslator; static IAddressTranslator srmpsAddressTranslator; static IAddressTranslator formatnameAddressTranslator; public static IAddressTranslator NetMsmqAddressTranslator { get { if (null == netMsmqAddressTranslator) netMsmqAddressTranslator = new MsmqUri.NetMsmq(); return netMsmqAddressTranslator; } } public static IAddressTranslator ActiveDirectoryAddressTranslator { get { if (null == activeDirectoryAddressTranslator) activeDirectoryAddressTranslator = new MsmqUri.ActiveDirectory(); return activeDirectoryAddressTranslator; } } public static IAddressTranslator DeadLetterQueueAddressTranslator { get { if (null == deadLetterQueueAddressTranslator) deadLetterQueueAddressTranslator = new MsmqUri.Dlq(); return deadLetterQueueAddressTranslator; } } public static IAddressTranslator SrmpAddressTranslator { get { if (null == srmpAddressTranslator) srmpAddressTranslator = new MsmqUri.Srmp(); return srmpAddressTranslator; } } public static IAddressTranslator SrmpsAddressTranslator { get { if (null == srmpsAddressTranslator) srmpsAddressTranslator = new MsmqUri.SrmpSecure(); return srmpsAddressTranslator; } } public static IAddressTranslator FormatNameAddressTranslator { get { if (null == formatnameAddressTranslator) formatnameAddressTranslator = new MsmqUri.FormatName(); return formatnameAddressTranslator; } } public static string UriToFormatNameByScheme(Uri uri) { if(uri.Scheme == NetMsmqAddressTranslator.Scheme) { return NetMsmqAddressTranslator.UriToFormatName(uri); } else if(uri.Scheme == FormatNameAddressTranslator.Scheme) { return FormatNameAddressTranslator.UriToFormatName(uri); } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("uri"); } } static void AppendQueueName(StringBuilder builder, string relativePath, string slash) { const string privatePart = "/private"; if (relativePath.StartsWith("/private$", StringComparison.OrdinalIgnoreCase)) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.MsmqWrongPrivateQueueSyntax))); if (relativePath.StartsWith(privatePart, StringComparison.OrdinalIgnoreCase)) { if (privatePart.Length == relativePath.Length) { builder.Append("private$"); builder.Append(slash); relativePath = "/"; } else if ('/' == relativePath[privatePart.Length]) { builder.Append("private$"); builder.Append(slash); relativePath = relativePath.Substring(privatePart.Length); } } builder.Append(relativePath.Substring(1)); } internal interface IAddressTranslator { string Scheme { get; } string UriToFormatName(Uri uri); Uri CreateUri(string host, string name, bool isPrivate); } class NetMsmq : IAddressTranslator { public string Scheme { get { return "net.msmq"; } } public string UriToFormatName(Uri uri) { if (null == uri) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("uri")); if (uri.Scheme != this.Scheme) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.MsmqInvalidScheme), "uri")); if (String.IsNullOrEmpty(uri.Host)) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(SR.GetString(SR.MsmqWrongUri)); if (-1 != uri.Port) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(SR.GetString(SR.MsmqUnexpectedPort)); StringBuilder builder = new StringBuilder(); builder.Append("DIRECT="); if (0 == String.Compare(uri.Host, "localhost", StringComparison.OrdinalIgnoreCase)) builder.Append("OS:."); else { IPAddress address = null; if(IPAddress.TryParse(uri.Host, out address)) builder.Append("TCP:"); else builder.Append("OS:"); builder.Append(uri.Host); } builder.Append("\\"); MsmqUri.AppendQueueName(builder, Uri.UnescapeDataString(uri.PathAndQuery), "\\"); return builder.ToString(); } public Uri CreateUri(string host, string name, bool isPrivate) { string path = "/" + name; if(isPrivate) { path = "/private" + path; } return (new UriBuilder(Scheme, host, -1, path)).Uri; } } class PathName : IAddressTranslator { public string Scheme { get { return "net.msmq"; } } public virtual string UriToFormatName(Uri uri) { if (null == uri) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("uri")); if (uri.Scheme != this.Scheme) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.MsmqInvalidScheme), "uri")); if (String.IsNullOrEmpty(uri.Host)) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(SR.GetString(SR.MsmqWrongUri)); if (-1 != uri.Port) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(SR.GetString(SR.MsmqUnexpectedPort)); uri = PostVerify(uri); StringBuilder builder = new StringBuilder(); if (0 == String.Compare(uri.Host, "localhost", StringComparison.OrdinalIgnoreCase)) builder.Append("."); else builder.Append(uri.Host); builder.Append("\\"); MsmqUri.AppendQueueName(builder, Uri.UnescapeDataString(uri.PathAndQuery), "\\"); return builder.ToString(); } public Uri CreateUri(string host, string name, bool isPrivate) { string path = "/" + name; if(isPrivate) { path = "/private" + path; } return (new UriBuilder(Scheme, host, -1, path)).Uri; } protected virtual Uri PostVerify(Uri uri) { return uri; } } class ActiveDirectory : PathName { public override string UriToFormatName(Uri uri) { return MsmqFormatName.FromQueuePath(base.UriToFormatName(uri)); } } class Dlq : PathName { protected override Uri PostVerify(Uri uri) { if (0 == String.Compare(uri.Host, "localhost", StringComparison.OrdinalIgnoreCase)) return uri; try { if (0 == String.Compare(DnsCache.MachineName, DnsCache.Resolve(uri.Host).HostName, StringComparison.OrdinalIgnoreCase)) { return new UriBuilder(Scheme, "localhost", -1, uri.PathAndQuery).Uri; } } catch (EndpointNotFoundException ex) { MsmqDiagnostics.ExpectedException(ex); } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.MsmqDLQNotLocal), "uri")); } } abstract class SrmpBase : IAddressTranslator { const string msmqPart = "/msmq/"; public string Scheme { get { return "net.msmq"; } } public string UriToFormatName(Uri uri) { if (null == uri) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("uri")); if (uri.Scheme != this.Scheme) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.MsmqInvalidScheme), "uri")); if (String.IsNullOrEmpty(uri.Host)) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(SR.GetString(SR.MsmqWrongUri)); StringBuilder builder = new StringBuilder(); builder.Append("DIRECT="); builder.Append(this.DirectScheme); builder.Append(uri.Host); if (-1 != uri.Port) { builder.Append(":"); builder.Append(uri.Port.ToString(CultureInfo.InvariantCulture)); } string relativePath = Uri.UnescapeDataString(uri.PathAndQuery); builder.Append(msmqPart); MsmqUri.AppendQueueName(builder, relativePath, "/"); return builder.ToString(); } abstract protected string DirectScheme { get; } public Uri CreateUri(string host, string name, bool isPrivate) { string path = "/" + name; if(isPrivate) { path = "/private" + path; } return (new UriBuilder(Scheme, host, -1, path)).Uri; } } class Srmp : SrmpBase { protected override string DirectScheme { get { return "http://"; } } } class SrmpSecure : SrmpBase { protected override string DirectScheme { get { return "https://"; } } } class FormatName : IAddressTranslator { public string Scheme { get { return "msmq.formatname"; } } public string UriToFormatName(Uri uri) { if (null == uri) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("uri")); if (uri.Scheme != this.Scheme) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.MsmqInvalidScheme), "uri")); return Uri.UnescapeDataString(uri.AbsoluteUri.Substring(this.Scheme.Length+1)); } public Uri CreateUri(string host, string name, bool isPrivate) { string path; if(isPrivate) { path = "PRIVATE$\\" + name; } else { path = name; } path = "DIRECT=OS:" + host + "\\" + path; return new Uri(Scheme + ":" + path); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BaseUriHelper.cs
- SmtpTransport.cs
- SchemaElementDecl.cs
- XmlSchemaInclude.cs
- StrokeNodeEnumerator.cs
- WebPartsPersonalization.cs
- LoadRetryStrategyFactory.cs
- ServiceModelConfigurationSection.cs
- PropertyBuilder.cs
- ToolBarButton.cs
- wgx_render.cs
- BitSet.cs
- HierarchicalDataSourceControl.cs
- RadioButton.cs
- EpmCustomContentWriterNodeData.cs
- DbCommandTree.cs
- PolicyLevel.cs
- UITypeEditors.cs
- SoapTypeAttribute.cs
- AssertFilter.cs
- VariantWrapper.cs
- xmlformatgeneratorstatics.cs
- WebPartConnectionsDisconnectVerb.cs
- GPPOINT.cs
- FileDialogCustomPlacesCollection.cs
- RightsManagementEncryptedStream.cs
- Rect.cs
- XmlDataLoader.cs
- KeyGestureConverter.cs
- XmlValidatingReader.cs
- TemplateLookupAction.cs
- DataBoundControlAdapter.cs
- DataGridViewMethods.cs
- DPAPIProtectedConfigurationProvider.cs
- CallbackValidatorAttribute.cs
- QueueException.cs
- DataList.cs
- _CacheStreams.cs
- TimeIntervalCollection.cs
- TableCellAutomationPeer.cs
- Mutex.cs
- InfoCardClaimCollection.cs
- InternalBufferManager.cs
- DataSetUtil.cs
- ImagingCache.cs
- TextContainerHelper.cs
- SqlCrossApplyToCrossJoin.cs
- ListSourceHelper.cs
- NumberEdit.cs
- RenderContext.cs
- MdiWindowListStrip.cs
- QueueProcessor.cs
- ListControl.cs
- EditorPartChrome.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- SingleConverter.cs
- PbrsForward.cs
- SqlDesignerDataSourceView.cs
- InstallerTypeAttribute.cs
- CodeGotoStatement.cs
- DrawingAttributeSerializer.cs
- CheckedListBox.cs
- WpfKnownType.cs
- ReaderWriterLockSlim.cs
- WebPartZoneBase.cs
- MergeFilterQuery.cs
- NamedObject.cs
- Point3DCollection.cs
- ToolTipService.cs
- ActivityPreviewDesigner.cs
- CultureTable.cs
- EntityContainer.cs
- SchemaManager.cs
- HostExecutionContextManager.cs
- RectangleGeometry.cs
- CfgParser.cs
- Canonicalizers.cs
- AsnEncodedData.cs
- SystemColors.cs
- AttachedAnnotation.cs
- VisualCollection.cs
- SoapAttributes.cs
- SoundPlayerAction.cs
- PageParserFilter.cs
- StandardCommandToolStripMenuItem.cs
- StaticExtensionConverter.cs
- shaperfactory.cs
- CustomErrorCollection.cs
- WebPartCollection.cs
- ChildTable.cs
- QueryRewriter.cs
- CheckBox.cs
- ThousandthOfEmRealPoints.cs
- CollectionViewGroup.cs
- WebHttpEndpointElement.cs
- StorageAssociationSetMapping.cs
- compensatingcollection.cs
- SourceLineInfo.cs
- NonParentingControl.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs