Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities.DurableInstancing / System / Activities / DurableInstancing / LoadWorkflowAsyncResult.cs / 1305376 / LoadWorkflowAsyncResult.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.DurableInstancing { using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Globalization; using System.Linq; using System.Runtime.DurableInstancing; using System.Transactions; using System.Xml.Linq; class LoadWorkflowAsyncResult : SqlWorkflowInstanceStoreAsyncResult { static readonly string commandText = string.Format(CultureInfo.InvariantCulture, "{0}.[LoadInstance]", SqlWorkflowInstanceStoreConstants.DefaultSchema); Dictionary> associatedInstanceKeys; Dictionary > completedInstanceKeys; Dictionary instanceData; Dictionary instanceMetadata; IObjectSerializer objectSerializer; public LoadWorkflowAsyncResult ( InstancePersistenceContext context, InstancePersistenceCommand command, SqlWorkflowInstanceStore store, SqlWorkflowInstanceStoreLock storeLock, Transaction currentTransaction, TimeSpan timeout, AsyncCallback callback, object state ) : base(context, command, store, storeLock, currentTransaction, timeout, callback, state) { this.associatedInstanceKeys = new Dictionary >(); this.completedInstanceKeys = new Dictionary >(); this.objectSerializer = ObjectSerializerFactory.GetDefaultObjectSerializer(); } protected void GenerateLoadSqlCommand ( SqlCommand command, LoadType loadType, Guid keyToLoadBy, Guid instanceId, List keysToAssociate ) { long surrogateLockOwnerId = base.StoreLock.SurrogateLockOwnerId; byte[] concatenatedKeyProperties = null; bool singleKeyToAssociate = (keysToAssociate != null && keysToAssociate.Count == 1); if (keysToAssociate != null) { concatenatedKeyProperties = SerializationUtilities.CreateKeyBinaryBlob(keysToAssociate); } double operationTimeout = this.TimeoutHelper.RemainingTime().TotalMilliseconds; SqlParameterCollection parameters = command.Parameters; parameters.Add(new SqlParameter { ParameterName = "@surrogateLockOwnerId", SqlDbType = SqlDbType.BigInt, Value = surrogateLockOwnerId }); parameters.Add(new SqlParameter { ParameterName = "@operationType", SqlDbType = SqlDbType.TinyInt, Value = loadType }); parameters.Add(new SqlParameter { ParameterName = "@keyToLoadBy", SqlDbType = SqlDbType.UniqueIdentifier, Value = keyToLoadBy }); parameters.Add(new SqlParameter { ParameterName = "@instanceId", SqlDbType = SqlDbType.UniqueIdentifier, Value = instanceId }); parameters.Add(new SqlParameter { ParameterName = "@handleInstanceVersion", SqlDbType = SqlDbType.BigInt, Value = base.InstancePersistenceContext.InstanceVersion }); parameters.Add(new SqlParameter { ParameterName = "@handleIsBoundToLock", SqlDbType = SqlDbType.Bit, Value = base.InstancePersistenceContext.InstanceView.IsBoundToLock }); parameters.Add(new SqlParameter { ParameterName = "@keysToAssociate", SqlDbType = SqlDbType.Xml, Value = singleKeyToAssociate ? DBNull.Value : SerializationUtilities.CreateCorrelationKeyXmlBlob(keysToAssociate) }); parameters.Add(new SqlParameter { ParameterName = "@encodingOption", SqlDbType = SqlDbType.TinyInt, Value = base.Store.InstanceEncodingOption }); parameters.Add(new SqlParameter { ParameterName = "@concatenatedKeyProperties", SqlDbType = SqlDbType.VarBinary, Value = (object) concatenatedKeyProperties ?? DBNull.Value }); parameters.Add(new SqlParameter { ParameterName = "@operationTimeout", SqlDbType = SqlDbType.Int, Value = (operationTimeout < Int32.MaxValue) ? Convert.ToInt32(operationTimeout) : Int32.MaxValue }); parameters.Add(new SqlParameter { ParameterName = "@singleKeyId", SqlDbType = SqlDbType.UniqueIdentifier, Value = singleKeyToAssociate ? keysToAssociate[0].KeyId : (object) DBNull.Value }); } protected override void GenerateSqlCommand(SqlCommand command) { LoadWorkflowCommand loadWorkflowCommand = base.InstancePersistenceCommand as LoadWorkflowCommand; LoadType loadType = loadWorkflowCommand.AcceptUninitializedInstance ? LoadType.LoadOrCreateByInstance : LoadType.LoadByInstance; Guid instanceId = base.InstancePersistenceContext.InstanceView.InstanceId; GenerateLoadSqlCommand(command, loadType, Guid.Empty, instanceId, null); } protected override string GetSqlCommandText() { return LoadWorkflowAsyncResult.commandText; } protected override CommandType GetSqlCommandType() { return CommandType.StoredProcedure; } protected override Exception ProcessSqlResult(SqlDataReader reader) { Exception exception = StoreUtilities.GetNextResultSet(base.InstancePersistenceCommand.Name, reader); if (exception == null) { Guid instanceId = reader.GetGuid(1); long surrogateInstanceId = reader.GetInt64(2); byte[] primitiveProperties = reader.IsDBNull(3) ? null : (byte[])(reader.GetValue(3)); byte[] complexProperties = reader.IsDBNull(4) ? null : (byte[])(reader.GetValue(4)); byte[] metadataProperties = reader.IsDBNull(5) ? null : (byte[])(reader.GetValue(5)); InstanceEncodingOption dataEncodingOption = (InstanceEncodingOption)(reader.GetByte(6)); InstanceEncodingOption metadataEncodingOption = (InstanceEncodingOption)(reader.GetByte(7)); long version = reader.GetInt64(8); bool isInitialized = reader.GetBoolean(9); bool createdInstance = reader.GetBoolean(10); LoadWorkflowCommand loadWorkflowCommand = base.InstancePersistenceCommand as LoadWorkflowCommand; LoadWorkflowByInstanceKeyCommand loadByKeycommand = base.InstancePersistenceCommand as LoadWorkflowByInstanceKeyCommand; if (!base.InstancePersistenceContext.InstanceView.IsBoundToInstance) { base.InstancePersistenceContext.BindInstance(instanceId); } if (!base.InstancePersistenceContext.InstanceView.IsBoundToInstanceOwner) { base.InstancePersistenceContext.BindInstanceOwner(base.StoreLock.LockOwnerId, base.StoreLock.LockOwnerId); } if (!base.InstancePersistenceContext.InstanceView.IsBoundToLock) { InstanceLockTracking instanceLockTracking = (InstanceLockTracking)(base.InstancePersistenceContext.UserContext); instanceLockTracking.TrackStoreLock(instanceId, version, this.DependentTransaction); base.InstancePersistenceContext.BindAcquiredLock(version); } this.instanceData = SerializationUtilities.DeserializePropertyBag(primitiveProperties, complexProperties, dataEncodingOption); this.instanceMetadata = SerializationUtilities.DeserializeMetadataPropertyBag(metadataProperties, metadataEncodingOption); if (!createdInstance) { ReadInstanceMetadataChanges(reader, this.instanceMetadata); ReadKeyData(reader, this.associatedInstanceKeys, this.completedInstanceKeys); } else if (loadByKeycommand != null) { foreach (KeyValuePair > keyEntry in loadByKeycommand.InstanceKeysToAssociate) { this.associatedInstanceKeys.Add(keyEntry.Key, keyEntry.Value); } if (!this.associatedInstanceKeys.ContainsKey(loadByKeycommand.LookupInstanceKey)) { base.InstancePersistenceContext.AssociatedInstanceKey(loadByKeycommand.LookupInstanceKey); this.associatedInstanceKeys.Add(loadByKeycommand.LookupInstanceKey, new Dictionary ()); } } if (loadByKeycommand != null) { foreach (KeyValuePair > keyEntry in loadByKeycommand.InstanceKeysToAssociate) { base.InstancePersistenceContext.AssociatedInstanceKey(keyEntry.Key); if (keyEntry.Value != null) { foreach (KeyValuePair property in keyEntry.Value) { base.InstancePersistenceContext.WroteInstanceKeyMetadataValue(keyEntry.Key, property.Key, property.Value); } } } } base.InstancePersistenceContext.LoadedInstance ( isInitialized ? InstanceState.Initialized : InstanceState.Uninitialized, this.instanceData, this.instanceMetadata, this.associatedInstanceKeys, this.completedInstanceKeys ); } else if (exception is InstanceLockLostException) { base.InstancePersistenceContext.InstanceHandle.Free(); } return exception; } void ReadInstanceMetadataChanges(SqlDataReader reader, Dictionary instanceMetadata) { Exception exception = StoreUtilities.GetNextResultSet(base.InstancePersistenceCommand.Name, reader); if (exception == null) { if (reader.IsDBNull(1)) { return; } } do { InstanceEncodingOption encodingOption = (InstanceEncodingOption) reader.GetByte(1); byte[] serializedMetadataChanges = (byte[]) reader.GetValue(2); Dictionary metadataChangeSet = SerializationUtilities.DeserializeMetadataPropertyBag(serializedMetadataChanges, encodingOption); foreach (KeyValuePair metadataChange in metadataChangeSet) { XName xname = metadataChange.Key; InstanceValue propertyValue = metadataChange.Value; if (propertyValue.Value is DeletedMetadataValue) { instanceMetadata.Remove(xname); } else { instanceMetadata[xname] = propertyValue; } } } while (reader.Read()); } void ReadKeyData(SqlDataReader reader, Dictionary > associatedInstanceKeys, Dictionary > completedInstanceKeys) { Exception exception = StoreUtilities.GetNextResultSet(base.InstancePersistenceCommand.Name, reader); if (exception == null) { if (reader.IsDBNull(1)) { return; } do { Guid key = reader.GetGuid(1); bool isAssociated = reader.GetBoolean(2); InstanceEncodingOption encodingOption = (InstanceEncodingOption) reader.GetByte(3); Dictionary > destination = isAssociated ? associatedInstanceKeys : completedInstanceKeys; if (!reader.IsDBNull(4)) { destination[key] = SerializationUtilities.DeserializeKeyMetadata((byte[]) reader.GetValue(4), encodingOption); } else { destination[key] = new Dictionary (); } } while (reader.Read()); } } } } // 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
- TextStore.cs
- VisualBrush.cs
- RuntimeArgumentHandle.cs
- FileSystemWatcher.cs
- WebExceptionStatus.cs
- RuntimeCompatibilityAttribute.cs
- ProtocolsConfigurationEntry.cs
- SqlGenericUtil.cs
- ConfigurationElement.cs
- DictionaryManager.cs
- CodeLabeledStatement.cs
- FilterQueryOptionExpression.cs
- TdsParserStateObject.cs
- XsltContext.cs
- OdbcConnectionPoolProviderInfo.cs
- ValidationRuleCollection.cs
- DataException.cs
- BufferedResponseStream.cs
- CodeTypeReferenceExpression.cs
- RC2.cs
- BackgroundFormatInfo.cs
- RectangleHotSpot.cs
- CollectionViewSource.cs
- MenuAdapter.cs
- OAVariantLib.cs
- TextControlDesigner.cs
- SQLRoleProvider.cs
- ProviderIncompatibleException.cs
- PopupControlService.cs
- RoutedEventHandlerInfo.cs
- UnauthorizedWebPart.cs
- IconHelper.cs
- SqlUtils.cs
- EnumerableCollectionView.cs
- ResolvedKeyFrameEntry.cs
- SafeHandle.cs
- RepeaterItemCollection.cs
- TileModeValidation.cs
- AddIn.cs
- IntSecurity.cs
- StreamAsIStream.cs
- CellParaClient.cs
- MsmqInputMessagePool.cs
- ListViewInsertedEventArgs.cs
- XamlFilter.cs
- ObservableDictionary.cs
- HeaderElement.cs
- ActivationServices.cs
- CompiledRegexRunner.cs
- MasterPage.cs
- UIElement.cs
- Point3DCollectionValueSerializer.cs
- XmlEnumAttribute.cs
- SettingsAttributeDictionary.cs
- KeyInterop.cs
- TextSearch.cs
- EventMappingSettingsCollection.cs
- SQLDoubleStorage.cs
- GeneralTransform2DTo3D.cs
- CmsInterop.cs
- OutputCache.cs
- baseaxisquery.cs
- DataColumnPropertyDescriptor.cs
- SmtpLoginAuthenticationModule.cs
- Span.cs
- XmlSchemaComplexContentRestriction.cs
- StringUtil.cs
- SafeHGlobalHandleCritical.cs
- sqlpipe.cs
- HybridCollection.cs
- CachedTypeface.cs
- RawAppCommandInputReport.cs
- WorkflowPrinting.cs
- AnnotationHelper.cs
- TimeSpanValidator.cs
- MediaPlayerState.cs
- XmlMembersMapping.cs
- WSSecurityPolicy.cs
- StatusStrip.cs
- UrlPath.cs
- IsolationInterop.cs
- CodeArgumentReferenceExpression.cs
- WorkflowApplication.cs
- EventNotify.cs
- InputQueue.cs
- ResourceExpression.cs
- TextViewSelectionProcessor.cs
- DrawingVisualDrawingContext.cs
- TokenBasedSetEnumerator.cs
- DrawingServices.cs
- Invariant.cs
- StatusBar.cs
- Baml2006ReaderContext.cs
- SoapReflectionImporter.cs
- EditorPart.cs
- XPathNodeHelper.cs
- TdsParserSafeHandles.cs
- NetworkInformationPermission.cs
- TextTrailingCharacterEllipsis.cs
- StdValidatorsAndConverters.cs