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
- AliasedSlot.cs
- AddInAdapter.cs
- StringWriter.cs
- SourceInterpreter.cs
- HybridWebProxyFinder.cs
- AVElementHelper.cs
- SettingsAttributeDictionary.cs
- TabletDevice.cs
- XmlWrappingReader.cs
- IgnoreSectionHandler.cs
- ClosableStream.cs
- EditorPartChrome.cs
- RadioButtonAutomationPeer.cs
- ContentValidator.cs
- LowerCaseStringConverter.cs
- HttpRequestCacheValidator.cs
- TextSelectionHelper.cs
- Int32CollectionConverter.cs
- EntityDataSourceReferenceGroup.cs
- XmlBoundElement.cs
- XDRSchema.cs
- EntityConnectionStringBuilder.cs
- XXXInfos.cs
- TextElement.cs
- HtmlInputCheckBox.cs
- KeyValueInternalCollection.cs
- Activity.cs
- ListBindingHelper.cs
- DragDeltaEventArgs.cs
- ImageButton.cs
- InvokeFunc.cs
- ProfileProvider.cs
- EdmProperty.cs
- EntityFunctions.cs
- CatalogZoneBase.cs
- FontResourceCache.cs
- Storyboard.cs
- IDReferencePropertyAttribute.cs
- DrawingContextWalker.cs
- TypeListConverter.cs
- XmlWriter.cs
- TimeEnumHelper.cs
- BamlRecordWriter.cs
- ResizingMessageFilter.cs
- RowUpdatedEventArgs.cs
- GatewayIPAddressInformationCollection.cs
- ColorTranslator.cs
- SignatureHelper.cs
- ResourcePermissionBaseEntry.cs
- SamlSubjectStatement.cs
- EventLogStatus.cs
- Bitmap.cs
- DataSetFieldSchema.cs
- DelegateHelpers.Generated.cs
- HitTestFilterBehavior.cs
- Rss20FeedFormatter.cs
- ObjectDataProvider.cs
- TemplatedWizardStep.cs
- InkCanvas.cs
- XmlDataImplementation.cs
- RecordsAffectedEventArgs.cs
- NullableConverter.cs
- ComboBoxRenderer.cs
- References.cs
- SuppressIldasmAttribute.cs
- OleDbTransaction.cs
- ModuleConfigurationInfo.cs
- QueryCacheManager.cs
- XmlArrayItemAttribute.cs
- PlanCompilerUtil.cs
- ExpressionBuilder.cs
- ViewBase.cs
- StyleCollection.cs
- PropertyBuilder.cs
- HyperLinkDataBindingHandler.cs
- UpdateCompiler.cs
- BlockExpression.cs
- StrokeCollection.cs
- DateTime.cs
- RadioButton.cs
- XmlReflectionImporter.cs
- View.cs
- PagesChangedEventArgs.cs
- MemberPathMap.cs
- TextElementAutomationPeer.cs
- MetadataArtifactLoaderCompositeResource.cs
- SpotLight.cs
- COM2EnumConverter.cs
- ChineseLunisolarCalendar.cs
- QueryStringParameter.cs
- XmlTypeAttribute.cs
- DelegatedStream.cs
- TextFindEngine.cs
- CodeMethodReturnStatement.cs
- DataGridPageChangedEventArgs.cs
- ApplicationFileParser.cs
- CompareValidator.cs
- ScriptResourceInfo.cs
- DiscreteKeyFrames.cs
- XmlArrayItemAttributes.cs