Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / TransactionBridge / Microsoft / Transactions / Wsat / InputOutput / Ports.cs / 2 / Ports.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- // This file implements utility functions relating to messaging using System; using System.ServiceModel.Channels; using System.Diagnostics; using System.Globalization; using System.ServiceModel; using System.Security.Cryptography; using System.Text; using System.Xml; using Microsoft.Transactions.Bridge; using Microsoft.Transactions.Wsat.Messaging; using Microsoft.Transactions.Wsat.Protocol; using DiagnosticUtility = Microsoft.Transactions.Bridge.DiagnosticUtility; using ServiceModelDiagnosticUtility = System.ServiceModel.DiagnosticUtility; namespace Microsoft.Transactions.Wsat.InputOutput { static class Ports { public static Guid GetGuidFromTransactionId (string transactionId) { // E.g. "a01b8bc6781641c4b138c1acdcc940ef" const int minGuidLength = 32; int minTransactionIdLength = CoordinationContext.UuidScheme.Length + minGuidLength; if (transactionId.Length >= minTransactionIdLength && transactionId.StartsWith(CoordinationContext.UuidScheme, StringComparison.OrdinalIgnoreCase)) { Guid txIdGuid; if (ServiceModelDiagnosticUtility.Utility.TryCreateGuid( transactionId.Substring(CoordinationContext.UuidScheme.Length), out txIdGuid)) { return txIdGuid; } } // // Interop path // // Create a guid deterministically, using the transaction id as input // For obvious reasons, we need a 128-bit hash. // We can't use entropy because we want to be deterministic. Collisions are only fatal // if they occur often enough to coincide in a log. // // We do this to avoid deadlocks in RMs who might participant in the same // transaction through WS-AT and some other protocol that doesn't know about // the WS-AT specific id HashAlgorithm hash = SHA256.Create(); using (hash) { hash.Initialize(); byte[] buffer = Encoding.UTF8.GetBytes(transactionId); byte[] fullHash = hash.ComputeHash(buffer); // Grab the first 128 bits off the hash - see MB 40808 for more details byte[] hash128 = new byte[16]; Array.Copy(fullHash, hash128, hash128.Length); return new Guid(hash128); } } // // Addresses // public static string TryGetAddress(Proxy proxy) { if (proxy == null) { return "unknown"; } return proxy.To.Uri.AbsoluteUri; } public static string TryGetFromAddress(Message message) { string address; EndpointAddress replyTo = Library.GetReplyToHeader(message.Headers); if (replyTo != null) { address = replyTo.Uri.AbsoluteUri; if (address != null) { return address; } } return "unknown"; } public static bool TryGetEnlistment(Message message, out Guid enlistmentId, out ControlProtocol protocol) { enlistmentId = Guid.Empty; protocol = ControlProtocol.None; try { if (!EnlistmentHeader.ReadFrom(message, out enlistmentId, out protocol)) { return false; } } catch (InvalidEnlistmentHeaderException e) { DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Warning); return false; } return true; } public static bool TryGetEnlistment(Message message, out Guid enlistmentId) { ControlProtocol dontCare; return TryGetEnlistment(message, out enlistmentId, out dontCare); } } } // 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
- ControlValuePropertyAttribute.cs
- UntrustedRecipientException.cs
- SqlDataSourceEnumerator.cs
- Compiler.cs
- TableFieldsEditor.cs
- MimeTypeAttribute.cs
- BinaryObjectReader.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- SafeLibraryHandle.cs
- IFlowDocumentViewer.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- ProfileEventArgs.cs
- ControlTemplate.cs
- NamedPermissionSet.cs
- ZeroOpNode.cs
- SqlFunctionAttribute.cs
- MetadataItemSerializer.cs
- embossbitmapeffect.cs
- CompiledWorkflowDefinitionContext.cs
- WindowsToolbarItemAsMenuItem.cs
- ImageMap.cs
- Error.cs
- ToolStripPanelDesigner.cs
- httpserverutility.cs
- RuntimeTransactionHandle.cs
- ParenthesizePropertyNameAttribute.cs
- PropertyRef.cs
- WebPartDisplayModeCollection.cs
- MethodMessage.cs
- ClrPerspective.cs
- DesignTimeVisibleAttribute.cs
- ASCIIEncoding.cs
- PlainXmlDeserializer.cs
- DefaultObjectSerializer.cs
- IntegrationExceptionEventArgs.cs
- ToolStripRenderer.cs
- FunctionParameter.cs
- PaintEvent.cs
- ResponseBodyWriter.cs
- InfoCardSymmetricAlgorithm.cs
- TemplateApplicationHelper.cs
- WebSysDescriptionAttribute.cs
- RenderData.cs
- ParameterModifier.cs
- ObsoleteAttribute.cs
- SoapMessage.cs
- CompilerState.cs
- OleDbFactory.cs
- ServiceMetadataContractBehavior.cs
- WebPartsPersonalizationAuthorization.cs
- OleDbTransaction.cs
- ResourceIDHelper.cs
- RequestCacheEntry.cs
- ResourcePermissionBase.cs
- OleDbError.cs
- MetafileHeaderWmf.cs
- DesignerGeometryHelper.cs
- QuaternionKeyFrameCollection.cs
- SoapServerProtocol.cs
- ExpandButtonVisibilityConverter.cs
- TranslateTransform.cs
- HttpStreams.cs
- RegexRunnerFactory.cs
- Bold.cs
- DesignSurfaceEvent.cs
- NumberAction.cs
- DataSourceCache.cs
- RightsManagementPermission.cs
- OleDbCommandBuilder.cs
- XmlSignificantWhitespace.cs
- PositiveTimeSpanValidator.cs
- CompletedAsyncResult.cs
- TagPrefixAttribute.cs
- XmlCompatibilityReader.cs
- RadialGradientBrush.cs
- Listbox.cs
- TdsRecordBufferSetter.cs
- XmlExceptionHelper.cs
- AutomationProperty.cs
- Peer.cs
- BitmapSource.cs
- SerializableAttribute.cs
- IRCollection.cs
- DesignTimeHTMLTextWriter.cs
- XsdDateTime.cs
- JavaScriptString.cs
- HashAlgorithm.cs
- TryCatch.cs
- DataGridViewSelectedCellCollection.cs
- VirtualDirectoryMapping.cs
- LinqToSqlWrapper.cs
- ToolboxItemLoader.cs
- SpecularMaterial.cs
- XmlSchemaGroup.cs
- RenderingBiasValidation.cs
- ProfileBuildProvider.cs
- ToolStripGrip.cs
- TemplateBaseAction.cs
- ContentPlaceHolderDesigner.cs
- PipelineModuleStepContainer.cs