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
- SqlParameterizer.cs
- ExpressionVisitorHelpers.cs
- ProcessStartInfo.cs
- SqlVersion.cs
- TcpHostedTransportConfiguration.cs
- ResourceDictionaryCollection.cs
- AssemblyBuilderData.cs
- FontSourceCollection.cs
- OleTxTransaction.cs
- DataGridViewHitTestInfo.cs
- DiagnosticEventProvider.cs
- Slider.cs
- KeyValueConfigurationElement.cs
- ArgumentOutOfRangeException.cs
- RelationshipEndCollection.cs
- TableSectionStyle.cs
- EditorPartChrome.cs
- ManipulationVelocities.cs
- COM2ComponentEditor.cs
- ServiceAuthorizationElement.cs
- WebExceptionStatus.cs
- ManipulationDeltaEventArgs.cs
- DataGridClipboardCellContent.cs
- DbProviderServices.cs
- SafeSystemMetrics.cs
- DesignBindingValueUIHandler.cs
- PackWebRequest.cs
- ArglessEventHandlerProxy.cs
- BitmapEffectGroup.cs
- VirtualizingPanel.cs
- RotateTransform3D.cs
- ConfigurationManagerInternal.cs
- DictionaryGlobals.cs
- ProcessDesigner.cs
- HtmlForm.cs
- DiagnosticsConfigurationHandler.cs
- TextEffect.cs
- SafeNativeMethods.cs
- ResourceManagerWrapper.cs
- ColorPalette.cs
- HttpApplicationFactory.cs
- HMACMD5.cs
- BuilderElements.cs
- securitycriticaldata.cs
- InfoCardTraceRecord.cs
- TemplateInstanceAttribute.cs
- InvalidPrinterException.cs
- RecoverInstanceLocksCommand.cs
- XmlReturnReader.cs
- BlobPersonalizationState.cs
- ReflectionUtil.cs
- BindingCompleteEventArgs.cs
- KerberosTokenFactoryCredential.cs
- ErrorInfoXmlDocument.cs
- TcpClientChannel.cs
- TextBox.cs
- ClientSettingsProvider.cs
- Compensate.cs
- SQLDateTimeStorage.cs
- _Semaphore.cs
- OperationExecutionFault.cs
- TypeToken.cs
- CallContext.cs
- SiteMapPath.cs
- Keywords.cs
- TimeoutValidationAttribute.cs
- ScaleTransform3D.cs
- DataGridViewImageColumn.cs
- SchemaTypeEmitter.cs
- RegexCompiler.cs
- ResourcesBuildProvider.cs
- Mutex.cs
- ScriptHandlerFactory.cs
- XmlCountingReader.cs
- EventLogger.cs
- Button.cs
- ListViewGroup.cs
- httpstaticobjectscollection.cs
- DataKey.cs
- FieldToken.cs
- ShapeTypeface.cs
- OdbcParameterCollection.cs
- Registry.cs
- Operator.cs
- EtwTrace.cs
- MissingManifestResourceException.cs
- SafeProcessHandle.cs
- PinnedBufferMemoryStream.cs
- BitmapEffectDrawingContent.cs
- contentDescriptor.cs
- WinFormsSecurity.cs
- SQLByte.cs
- ResourceCategoryAttribute.cs
- CultureTableRecord.cs
- GeneralTransform2DTo3D.cs
- TraceUtility.cs
- Converter.cs
- TextElement.cs
- AuthenticationException.cs
- JsonFormatGeneratorStatics.cs