void ReadKeyData(SqlDataReader reader, Dictionary <Guid, IDictionary <XName, InstanceValue> > associatedInstanceKeys, Dictionary <Guid, IDictionary <XName, InstanceValue> > 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 <Guid, IDictionary <XName, InstanceValue> > destination = isAssociated ? associatedInstanceKeys : completedInstanceKeys; if (!reader.IsDBNull(4)) { destination[key] = SerializationUtilities.DeserializeKeyMetadata((byte[])reader.GetValue(4), encodingOption); } else { destination[key] = new Dictionary <XName, InstanceValue>(); } }while (reader.Read()); } }
void ReadInstanceMetadataChanges(SqlDataReader reader, Dictionary <XName, InstanceValue> 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 <XName, InstanceValue> metadataChangeSet = SerializationUtilities.DeserializeMetadataPropertyBag(serializedMetadataChanges, encodingOption); foreach (KeyValuePair <XName, InstanceValue> 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()); }
static Dictionary <XName, object> ReadLockOwnerMetadata(SqlDataReader reader) { Dictionary <XName, object> lockOwnerProperties = new Dictionary <XName, object>(); InstanceEncodingOption encodingOption = (InstanceEncodingOption)(reader.GetByte(3)); byte[] serializedPrimitiveLockOwnerData = reader.IsDBNull(4) ? null : (byte[])reader.GetValue(4); byte[] serializedComplexLockOwnerData = reader.IsDBNull(5) ? null : (byte[])reader.GetValue(5); IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); Dictionary <XName, object>[] lockOwnerPropertyBags = new Dictionary <XName, object> [2]; if (serializedPrimitiveLockOwnerData != null) { lockOwnerPropertyBags[0] = (Dictionary <XName, object>)serializer.DeserializeValue(serializedPrimitiveLockOwnerData); } if (serializedComplexLockOwnerData != null) { lockOwnerPropertyBags[1] = serializer.DeserializePropertyBag(serializedComplexLockOwnerData); } foreach (Dictionary <XName, object> propertyBag in lockOwnerPropertyBags) { if (propertyBag != null) { foreach (KeyValuePair <XName, object> property in propertyBag) { lockOwnerProperties.Add(property.Key, property.Value); } } } return(lockOwnerProperties); }
public static Dictionary<XName, InstanceValue> DeserializePropertyBag(byte[] primitiveDataProperties, byte[] complexDataProperties, InstanceEncodingOption encodingOption) { IObjectSerializer objectSerializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); Dictionary<XName, InstanceValue> dictionary = new Dictionary<XName, InstanceValue>(); Dictionary<XName, object>[] dictionaryArray = new Dictionary<XName, object>[2]; if (primitiveDataProperties != null) { dictionaryArray[0] = (Dictionary<XName, object>) objectSerializer.DeserializeValue(primitiveDataProperties); } if (complexDataProperties != null) { dictionaryArray[1] = objectSerializer.DeserializePropertyBag(complexDataProperties); } foreach (Dictionary<XName, object> dictionary2 in dictionaryArray) { if (dictionary2 != null) { foreach (KeyValuePair<XName, object> pair in dictionary2) { dictionary.Add(pair.Key, new InstanceValue(pair.Value)); } } } return dictionary; }
private static Dictionary <XName, object> ReadLockOwnerMetadata(SqlDataReader reader) { Dictionary <XName, object> dictionary = new Dictionary <XName, object>(); InstanceEncodingOption @byte = (InstanceEncodingOption)reader.GetByte(3); byte[] bytes = reader.IsDBNull(4) ? null : ((byte[])reader.GetValue(4)); byte[] buffer2 = reader.IsDBNull(5) ? null : ((byte[])reader.GetValue(5)); IObjectSerializer objectSerializer = ObjectSerializerFactory.GetObjectSerializer(@byte); Dictionary <XName, object>[] dictionaryArray = new Dictionary <XName, object> [2]; if (bytes != null) { dictionaryArray[0] = (Dictionary <XName, object>)objectSerializer.DeserializeValue(bytes); } if (buffer2 != null) { dictionaryArray[1] = objectSerializer.DeserializePropertyBag(buffer2); } foreach (Dictionary <XName, object> dictionary2 in dictionaryArray) { if (dictionary2 != null) { foreach (KeyValuePair <XName, object> pair in dictionary2) { dictionary.Add(pair.Key, pair.Value); } } } return(dictionary); }
public static IObjectSerializer GetObjectSerializer(InstanceEncodingOption instanceEncodingOption) { switch (instanceEncodingOption) { case InstanceEncodingOption.None: return(new DefaultObjectSerializer()); case InstanceEncodingOption.GZip: return(new GZipObjectSerializer()); } throw FxTrace.Exception.AsError(new InvalidOperationException(System.Activities.DurableInstancing.SR.UnknownCompressionOption(instanceEncodingOption))); }
public static IObjectSerializer GetObjectSerializer(InstanceEncodingOption instanceEncodingOption) { switch (instanceEncodingOption) { case InstanceEncodingOption.None: return new DefaultObjectSerializer(); case InstanceEncodingOption.GZip: return new GZipObjectSerializer(); } throw FxTrace.Exception.AsError(new InvalidOperationException(System.Activities.DurableInstancing.SR.UnknownCompressionOption(instanceEncodingOption))); }
public static List<CorrelationKey> BuildKeyList(IDictionary<Guid, IDictionary<XName, InstanceValue>> keys, InstanceEncodingOption encodingOption) { List<CorrelationKey> list = new List<CorrelationKey>(); if (keys != null) { foreach (KeyValuePair<Guid, IDictionary<XName, InstanceValue>> pair in keys) { list.Add(new CorrelationKey(pair.Key, pair.Value, encodingOption)); } } return list; }
public static Dictionary<XName, InstanceValue> DeserializeMetadataPropertyBag(byte[] serializedMetadataProperties, InstanceEncodingOption instanceEncodingOption) { Dictionary<XName, InstanceValue> dictionary = new Dictionary<XName, InstanceValue>(); if (serializedMetadataProperties != null) { foreach (KeyValuePair<XName, object> pair in ObjectSerializerFactory.GetObjectSerializer(instanceEncodingOption).DeserializePropertyBag(serializedMetadataProperties)) { dictionary.Add(pair.Key, new InstanceValue(pair.Value)); } } return dictionary; }
public static IObjectSerializer GetObjectSerializer(InstanceEncodingOption instanceEncodingOption) { IObjectSerializer result = null; switch (instanceEncodingOption) { case InstanceEncodingOption.None: result = new DefaultObjectSerializer(); break; case InstanceEncodingOption.GZip: result = new GZipObjectSerializer(); break; default: throw FxTrace.Exception.AsError(new InvalidOperationException( SR.UnknownCompressionOption(instanceEncodingOption))); } return result; }
public static IObjectSerializer GetObjectSerializer(InstanceEncodingOption instanceEncodingOption) { IObjectSerializer result = null; switch (instanceEncodingOption) { case InstanceEncodingOption.None: result = new DefaultObjectSerializer(); break; case InstanceEncodingOption.GZip: result = new GZipObjectSerializer(); break; default: throw FxTrace.Exception.AsError(new InvalidOperationException( SR.UnknownCompressionOption(instanceEncodingOption))); } return(result); }
private void ReadKeyData(SqlDataReader reader, Dictionary <Guid, IDictionary <XName, InstanceValue> > associatedInstanceKeys, Dictionary <Guid, IDictionary <XName, InstanceValue> > completedInstanceKeys) { if ((StoreUtilities.GetNextResultSet(base.InstancePersistenceCommand.Name, reader) == null) && !reader.IsDBNull(1)) { do { Guid guid = reader.GetGuid(1); bool boolean = reader.GetBoolean(2); InstanceEncodingOption @byte = (InstanceEncodingOption)reader.GetByte(3); Dictionary <Guid, IDictionary <XName, InstanceValue> > dictionary = boolean ? associatedInstanceKeys : completedInstanceKeys; if (!reader.IsDBNull(4)) { dictionary[guid] = SerializationUtilities.DeserializeKeyMetadata((byte[])reader.GetValue(4), @byte); } else { dictionary[guid] = new Dictionary <XName, InstanceValue>(); } }while (reader.Read()); } }
private void ReadInstanceMetadataChanges(SqlDataReader reader, Dictionary <XName, InstanceValue> instanceMetadata) { if ((StoreUtilities.GetNextResultSet(base.InstancePersistenceCommand.Name, reader) != null) || !reader.IsDBNull(1)) { do { InstanceEncodingOption @byte = (InstanceEncodingOption)reader.GetByte(1); byte[] serializedMetadataProperties = (byte[])reader.GetValue(2); foreach (KeyValuePair <XName, InstanceValue> pair in SerializationUtilities.DeserializeMetadataPropertyBag(serializedMetadataProperties, @byte)) { XName key = pair.Key; InstanceValue value2 = pair.Value; if (value2.Value is DeletedMetadataValue) { instanceMetadata.Remove(key); } else { instanceMetadata[key] = value2; } } }while (reader.Read()); } }
public CorrelationKey(Guid keyId, IDictionary <XName, InstanceValue> keyMetadata, InstanceEncodingOption encodingOption) { this.KeyId = keyId; this.BinaryData = SerializationUtilities.SerializeKeyMetadata(keyMetadata, encodingOption); }
public static Dictionary <XName, InstanceValue> DeserializeMetadataPropertyBag(byte[] serializedMetadataProperties, InstanceEncodingOption instanceEncodingOption) { Dictionary <XName, InstanceValue> metadataProperties = new Dictionary <XName, InstanceValue>(); if (serializedMetadataProperties != null) { IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(instanceEncodingOption); Dictionary <XName, object> propertyBag = serializer.DeserializePropertyBag(serializedMetadataProperties); foreach (KeyValuePair <XName, object> property in propertyBag) { metadataProperties.Add(property.Key, new InstanceValue(property.Value)); } } return(metadataProperties); }
protected override Exception ProcessSqlResult(SqlDataReader reader) { Exception nextResultSet = StoreUtilities.GetNextResultSet(base.InstancePersistenceCommand.Name, reader); if (nextResultSet == null) { Guid instanceId = reader.GetGuid(1); reader.GetInt64(2); byte[] primitiveDataProperties = reader.IsDBNull(3) ? null : ((byte[])reader.GetValue(3)); byte[] complexDataProperties = reader.IsDBNull(4) ? null : ((byte[])reader.GetValue(4)); byte[] serializedMetadataProperties = reader.IsDBNull(5) ? null : ((byte[])reader.GetValue(5)); InstanceEncodingOption @byte = (InstanceEncodingOption)reader.GetByte(6); InstanceEncodingOption instanceEncodingOption = (InstanceEncodingOption)reader.GetByte(7); long instanceVersion = reader.GetInt64(8); bool boolean = reader.GetBoolean(9); bool flag2 = reader.GetBoolean(10); InstancePersistenceCommand instancePersistenceCommand = base.InstancePersistenceCommand; LoadWorkflowByInstanceKeyCommand command = 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)base.InstancePersistenceContext.UserContext).TrackStoreLock(instanceId, instanceVersion, base.DependentTransaction); base.InstancePersistenceContext.BindAcquiredLock(instanceVersion); } this.instanceData = SerializationUtilities.DeserializePropertyBag(primitiveDataProperties, complexDataProperties, @byte); this.instanceMetadata = SerializationUtilities.DeserializeMetadataPropertyBag(serializedMetadataProperties, instanceEncodingOption); if (!flag2) { this.ReadInstanceMetadataChanges(reader, this.instanceMetadata); this.ReadKeyData(reader, this.associatedInstanceKeys, this.completedInstanceKeys); } else if (command != null) { foreach (KeyValuePair <Guid, IDictionary <XName, InstanceValue> > pair in command.InstanceKeysToAssociate) { this.associatedInstanceKeys.Add(pair.Key, pair.Value); } if (!this.associatedInstanceKeys.ContainsKey(command.LookupInstanceKey)) { base.InstancePersistenceContext.AssociatedInstanceKey(command.LookupInstanceKey); this.associatedInstanceKeys.Add(command.LookupInstanceKey, new Dictionary <XName, InstanceValue>()); } } if (command != null) { foreach (KeyValuePair <Guid, IDictionary <XName, InstanceValue> > pair2 in command.InstanceKeysToAssociate) { base.InstancePersistenceContext.AssociatedInstanceKey(pair2.Key); if (pair2.Value != null) { foreach (KeyValuePair <XName, InstanceValue> pair3 in pair2.Value) { base.InstancePersistenceContext.WroteInstanceKeyMetadataValue(pair2.Key, pair3.Key, pair3.Value); } } } } base.InstancePersistenceContext.LoadedInstance(boolean ? InstanceState.Initialized : InstanceState.Uninitialized, this.instanceData, this.instanceMetadata, this.associatedInstanceKeys, this.completedInstanceKeys); return(nextResultSet); } if (nextResultSet is InstanceLockLostException) { base.InstancePersistenceContext.InstanceHandle.Free(); } return(nextResultSet); }
public static object DeserializeObject(byte[] serializedObject, InstanceEncodingOption encodingOption) { return(ObjectSerializerFactory.GetObjectSerializer(encodingOption).DeserializeValue(serializedObject)); }
public static Dictionary <XName, InstanceValue> DeserializeKeyMetadata(byte[] serializedKeyMetadata, InstanceEncodingOption encodingOption) { return(DeserializeMetadataPropertyBag(serializedKeyMetadata, encodingOption)); }
public static ArraySegment <byte> SerializeObject(object objectToSerialize, InstanceEncodingOption encodingOption) { return(ObjectSerializerFactory.GetObjectSerializer(encodingOption).SerializeValue(objectToSerialize)); }
public static ArraySegment<byte> SerializeKeyMetadata(IDictionary<XName, InstanceValue> metadataProperties, InstanceEncodingOption encodingOption) { if ((metadataProperties == null) || (metadataProperties.Count <= 0)) { return new ArraySegment<byte>(); } Dictionary<XName, object> dictionary = new Dictionary<XName, object>(); foreach (KeyValuePair<XName, InstanceValue> pair in metadataProperties) { if ((pair.Value.Options & InstanceValueOptions.WriteOnly) != InstanceValueOptions.WriteOnly) { dictionary.Add(pair.Key, pair.Value.Value); } } return ObjectSerializerFactory.GetObjectSerializer(encodingOption).SerializePropertyBag(dictionary); }
public static Dictionary<XName, InstanceValue> DeserializeMetadataPropertyBag(byte[] serializedMetadataProperties, InstanceEncodingOption instanceEncodingOption) { Dictionary<XName, InstanceValue> metadataProperties = new Dictionary<XName, InstanceValue>(); if (serializedMetadataProperties != null) { IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(instanceEncodingOption); Dictionary<XName, object> propertyBag = serializer.DeserializePropertyBag(serializedMetadataProperties); foreach (KeyValuePair<XName, object> property in propertyBag) { metadataProperties.Add(property.Key, new InstanceValue(property.Value)); } } return metadataProperties; }
public static Dictionary<XName, InstanceValue> DeserializePropertyBag(byte[] primitiveDataProperties, byte[] complexDataProperties, InstanceEncodingOption encodingOption) { IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); Dictionary<XName, InstanceValue> properties = new Dictionary<XName, InstanceValue>(); Dictionary<XName, object>[] propertyBags = new Dictionary<XName, object>[2]; if (primitiveDataProperties != null) { propertyBags[0] = (Dictionary<XName, object>)serializer.DeserializeValue(primitiveDataProperties); } if (complexDataProperties != null) { propertyBags[1] = serializer.DeserializePropertyBag(complexDataProperties); } foreach (Dictionary<XName, object> propertyBag in propertyBags) { if (propertyBag != null) { foreach (KeyValuePair<XName, object> property in propertyBag) { properties.Add(property.Key, new InstanceValue(property.Value)); } } } return properties; }
public static ArraySegment<byte> SerializeKeyMetadata(IDictionary<XName, InstanceValue> metadataProperties, InstanceEncodingOption encodingOption) { if (metadataProperties != null && metadataProperties.Count > 0) { Dictionary<XName, object> propertyBag = new Dictionary<XName, object>(); foreach (KeyValuePair<XName, InstanceValue> property in metadataProperties) { if ((property.Value.Options & InstanceValueOptions.WriteOnly) != InstanceValueOptions.WriteOnly) { propertyBag.Add(property.Key, property.Value.Value); } } IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); return serializer.SerializePropertyBag(propertyBag); } return new ArraySegment<byte>(); }
public static ArraySegment<byte>[] SerializePropertyBag(IDictionary<XName, InstanceValue> properties, InstanceEncodingOption encodingOption) { ArraySegment<byte>[] dataArrays = new ArraySegment<byte>[4]; if (properties.Count > 0) { IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); XmlPropertyBag primitiveProperties = new XmlPropertyBag(); XmlPropertyBag primitiveWriteOnlyProperties = new XmlPropertyBag(); Dictionary<XName, object> complexProperties = new Dictionary<XName, object>(); Dictionary<XName, object> complexWriteOnlyProperties = new Dictionary<XName, object>(); Dictionary<XName, object>[] propertyBags = new Dictionary<XName, object>[] { primitiveProperties, complexProperties, primitiveWriteOnlyProperties, complexWriteOnlyProperties }; foreach (KeyValuePair<XName, InstanceValue> property in properties) { bool isComplex = (XmlPropertyBag.GetPrimitiveType(property.Value.Value) == PrimitiveType.Unavailable); bool isWriteOnly = (property.Value.Options & InstanceValueOptions.WriteOnly) == InstanceValueOptions.WriteOnly; int index = (isWriteOnly ? 2 : 0) + (isComplex ? 1 : 0); propertyBags[index].Add(property.Key, property.Value.Value); } // Remove the properties that are already stored as individual columns from the serialized blob primitiveWriteOnlyProperties.Remove(SqlWorkflowInstanceStoreConstants.StatusPropertyName); primitiveWriteOnlyProperties.Remove(SqlWorkflowInstanceStoreConstants.LastUpdatePropertyName); primitiveWriteOnlyProperties.Remove(SqlWorkflowInstanceStoreConstants.PendingTimerExpirationPropertyName); complexWriteOnlyProperties.Remove(SqlWorkflowInstanceStoreConstants.BinaryBlockingBookmarksPropertyName); for (int i = 0; i < propertyBags.Length; i++) { if (propertyBags[i].Count > 0) { if (propertyBags[i] is XmlPropertyBag) { dataArrays[i] = serializer.SerializeValue(propertyBags[i]); } else { dataArrays[i] = serializer.SerializePropertyBag(propertyBags[i]); } } } } return dataArrays; }
public static ArraySegment<byte> SerializeMetadataPropertyBag(SaveWorkflowCommand saveWorkflowCommand, InstancePersistenceContext context, InstanceEncodingOption instanceEncodingOption) { IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(instanceEncodingOption); Dictionary<XName, object> propertyBagToSerialize = new Dictionary<XName, object>(); if (context.InstanceView.InstanceMetadataConsistency == InstanceValueConsistency.None) { foreach (KeyValuePair<XName, InstanceValue> metadataProperty in context.InstanceView.InstanceMetadata) { if ((metadataProperty.Value.Options & InstanceValueOptions.WriteOnly) == 0) { propertyBagToSerialize.Add(metadataProperty.Key, metadataProperty.Value.Value); } } } foreach (KeyValuePair<XName, InstanceValue> metadataChange in saveWorkflowCommand.InstanceMetadataChanges) { if (metadataChange.Value.IsDeletedValue) { if (context.InstanceView.InstanceMetadataConsistency == InstanceValueConsistency.None) { propertyBagToSerialize.Remove(metadataChange.Key); } else { propertyBagToSerialize[metadataChange.Key] = new DeletedMetadataValue(); } } else if ((metadataChange.Value.Options & InstanceValueOptions.WriteOnly) == 0) { propertyBagToSerialize[metadataChange.Key] = metadataChange.Value.Value; } } if (propertyBagToSerialize.Count > 0) { return serializer.SerializePropertyBag(propertyBagToSerialize); } return new ArraySegment<byte>(); }
public static ArraySegment <byte> SerializeKeyMetadata(IDictionary <XName, InstanceValue> metadataProperties, InstanceEncodingOption encodingOption) { if ((metadataProperties == null) || (metadataProperties.Count <= 0)) { return(new ArraySegment <byte>()); } Dictionary <XName, object> dictionary = new Dictionary <XName, object>(); foreach (KeyValuePair <XName, InstanceValue> pair in metadataProperties) { if ((pair.Value.Options & InstanceValueOptions.WriteOnly) != InstanceValueOptions.WriteOnly) { dictionary.Add(pair.Key, pair.Value.Value); } } return(ObjectSerializerFactory.GetObjectSerializer(encodingOption).SerializePropertyBag(dictionary)); }
public static ArraySegment <byte> SerializeMetadataPropertyBag(SaveWorkflowCommand saveWorkflowCommand, InstancePersistenceContext context, InstanceEncodingOption instanceEncodingOption) { IObjectSerializer objectSerializer = ObjectSerializerFactory.GetObjectSerializer(instanceEncodingOption); Dictionary <XName, object> dictionary = new Dictionary <XName, object>(); if (context.InstanceView.InstanceMetadataConsistency == InstanceValueConsistency.None) { foreach (KeyValuePair <XName, InstanceValue> pair in context.InstanceView.InstanceMetadata) { if ((pair.Value.Options & InstanceValueOptions.WriteOnly) == InstanceValueOptions.None) { dictionary.Add(pair.Key, pair.Value.Value); } } } foreach (KeyValuePair <XName, InstanceValue> pair2 in saveWorkflowCommand.InstanceMetadataChanges) { if (pair2.Value.IsDeletedValue) { if (context.InstanceView.InstanceMetadataConsistency == InstanceValueConsistency.None) { dictionary.Remove(pair2.Key); } else { DeletedMetadataValue value2 = new DeletedMetadataValue(); dictionary[pair2.Key] = value2; } } else if ((pair2.Value.Options & InstanceValueOptions.WriteOnly) == InstanceValueOptions.None) { dictionary[pair2.Key] = pair2.Value.Value; } } if (dictionary.Count > 0) { return(objectSerializer.SerializePropertyBag(dictionary)); } return(new ArraySegment <byte>()); }
public static ArraySegment<byte> SerializeMetadataPropertyBag(SaveWorkflowCommand saveWorkflowCommand, InstancePersistenceContext context, InstanceEncodingOption instanceEncodingOption) { IObjectSerializer objectSerializer = ObjectSerializerFactory.GetObjectSerializer(instanceEncodingOption); Dictionary<XName, object> dictionary = new Dictionary<XName, object>(); if (context.InstanceView.InstanceMetadataConsistency == InstanceValueConsistency.None) { foreach (KeyValuePair<XName, InstanceValue> pair in context.InstanceView.InstanceMetadata) { if ((pair.Value.Options & InstanceValueOptions.WriteOnly) == InstanceValueOptions.None) { dictionary.Add(pair.Key, pair.Value.Value); } } } foreach (KeyValuePair<XName, InstanceValue> pair2 in saveWorkflowCommand.InstanceMetadataChanges) { if (pair2.Value.IsDeletedValue) { if (context.InstanceView.InstanceMetadataConsistency == InstanceValueConsistency.None) { dictionary.Remove(pair2.Key); } else { DeletedMetadataValue value2 = new DeletedMetadataValue(); dictionary[pair2.Key] = value2; } } else if ((pair2.Value.Options & InstanceValueOptions.WriteOnly) == InstanceValueOptions.None) { dictionary[pair2.Key] = pair2.Value.Value; } } if (dictionary.Count > 0) { return objectSerializer.SerializePropertyBag(dictionary); } return new ArraySegment<byte>(); }
public static ArraySegment <byte>[] SerializePropertyBag(IDictionary <XName, InstanceValue> properties, InstanceEncodingOption encodingOption) { ArraySegment <byte>[] segmentArray = new ArraySegment <byte> [4]; if (properties.Count > 0) { IObjectSerializer objectSerializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); XmlPropertyBag bag = new XmlPropertyBag(); XmlPropertyBag bag2 = new XmlPropertyBag(); Dictionary <XName, object> dictionary = new Dictionary <XName, object>(); Dictionary <XName, object> dictionary2 = new Dictionary <XName, object>(); Dictionary <XName, object>[] dictionaryArray = new Dictionary <XName, object>[] { bag, dictionary, bag2, dictionary2 }; foreach (KeyValuePair <XName, InstanceValue> pair in properties) { bool flag = XmlPropertyBag.GetPrimitiveType(pair.Value.Value) == PrimitiveType.Unavailable; int index = (((pair.Value.Options & InstanceValueOptions.WriteOnly) == InstanceValueOptions.WriteOnly) ? 2 : 0) + (flag ? 1 : 0); dictionaryArray[index].Add(pair.Key, pair.Value.Value); } bag2.Remove(SqlWorkflowInstanceStoreConstants.StatusPropertyName); bag2.Remove(SqlWorkflowInstanceStoreConstants.LastUpdatePropertyName); bag2.Remove(SqlWorkflowInstanceStoreConstants.PendingTimerExpirationPropertyName); dictionary2.Remove(SqlWorkflowInstanceStoreConstants.BinaryBlockingBookmarksPropertyName); for (int i = 0; i < dictionaryArray.Length; i++) { if (dictionaryArray[i].Count > 0) { if (dictionaryArray[i] is XmlPropertyBag) { segmentArray[i] = objectSerializer.SerializeValue(dictionaryArray[i]); } else { segmentArray[i] = objectSerializer.SerializePropertyBag(dictionaryArray[i]); } } } } return(segmentArray); }
public static ArraySegment<byte> SerializeObject(object objectToSerialize, InstanceEncodingOption encodingOption) { return ObjectSerializerFactory.GetObjectSerializer(encodingOption).SerializeValue(objectToSerialize); }
public static Dictionary <XName, InstanceValue> DeserializeMetadataPropertyBag(byte[] serializedMetadataProperties, InstanceEncodingOption instanceEncodingOption) { Dictionary <XName, InstanceValue> dictionary = new Dictionary <XName, InstanceValue>(); if (serializedMetadataProperties != null) { foreach (KeyValuePair <XName, object> pair in ObjectSerializerFactory.GetObjectSerializer(instanceEncodingOption).DeserializePropertyBag(serializedMetadataProperties)) { dictionary.Add(pair.Key, new InstanceValue(pair.Value)); } } return(dictionary); }
public static ArraySegment <byte> SerializeKeyMetadata(IDictionary <XName, InstanceValue> metadataProperties, InstanceEncodingOption encodingOption) { if (metadataProperties != null && metadataProperties.Count > 0) { Dictionary <XName, object> propertyBag = new Dictionary <XName, object>(); foreach (KeyValuePair <XName, InstanceValue> property in metadataProperties) { if ((property.Value.Options & InstanceValueOptions.WriteOnly) != InstanceValueOptions.WriteOnly) { propertyBag.Add(property.Key, property.Value.Value); } } IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); return(serializer.SerializePropertyBag(propertyBag)); } return(new ArraySegment <byte>()); }
public static Dictionary <XName, InstanceValue> DeserializePropertyBag(byte[] primitiveDataProperties, byte[] complexDataProperties, InstanceEncodingOption encodingOption) { IObjectSerializer objectSerializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); Dictionary <XName, InstanceValue> dictionary = new Dictionary <XName, InstanceValue>(); Dictionary <XName, object>[] dictionaryArray = new Dictionary <XName, object> [2]; if (primitiveDataProperties != null) { dictionaryArray[0] = (Dictionary <XName, object>)objectSerializer.DeserializeValue(primitiveDataProperties); } if (complexDataProperties != null) { dictionaryArray[1] = objectSerializer.DeserializePropertyBag(complexDataProperties); } foreach (Dictionary <XName, object> dictionary2 in dictionaryArray) { if (dictionary2 != null) { foreach (KeyValuePair <XName, object> pair in dictionary2) { dictionary.Add(pair.Key, new InstanceValue(pair.Value)); } } } return(dictionary); }
public static ArraySegment <byte>[] SerializePropertyBag(IDictionary <XName, InstanceValue> properties, InstanceEncodingOption encodingOption) { ArraySegment <byte>[] dataArrays = new ArraySegment <byte> [4]; if (properties.Count > 0) { IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); XmlPropertyBag primitiveProperties = new XmlPropertyBag(); XmlPropertyBag primitiveWriteOnlyProperties = new XmlPropertyBag(); Dictionary <XName, object> complexProperties = new Dictionary <XName, object>(); Dictionary <XName, object> complexWriteOnlyProperties = new Dictionary <XName, object>(); Dictionary <XName, object>[] propertyBags = new Dictionary <XName, object>[] { primitiveProperties, complexProperties, primitiveWriteOnlyProperties, complexWriteOnlyProperties }; foreach (KeyValuePair <XName, InstanceValue> property in properties) { bool isComplex = (XmlPropertyBag.GetPrimitiveType(property.Value.Value) == PrimitiveType.Unavailable); bool isWriteOnly = (property.Value.Options & InstanceValueOptions.WriteOnly) == InstanceValueOptions.WriteOnly; int index = (isWriteOnly ? 2 : 0) + (isComplex ? 1 : 0); propertyBags[index].Add(property.Key, property.Value.Value); } // Remove the properties that are already stored as individual columns from the serialized blob primitiveWriteOnlyProperties.Remove(SqlWorkflowInstanceStoreConstants.StatusPropertyName); primitiveWriteOnlyProperties.Remove(SqlWorkflowInstanceStoreConstants.LastUpdatePropertyName); primitiveWriteOnlyProperties.Remove(SqlWorkflowInstanceStoreConstants.PendingTimerExpirationPropertyName); complexWriteOnlyProperties.Remove(SqlWorkflowInstanceStoreConstants.BinaryBlockingBookmarksPropertyName); for (int i = 0; i < propertyBags.Length; i++) { if (propertyBags[i].Count > 0) { if (propertyBags[i] is XmlPropertyBag) { dataArrays[i] = serializer.SerializeValue(propertyBags[i]); } else { dataArrays[i] = serializer.SerializePropertyBag(propertyBags[i]); } } } } return(dataArrays); }
public CorrelationKey(Guid keyId, IDictionary<XName, InstanceValue> keyMetadata, InstanceEncodingOption encodingOption) { this.KeyId = keyId; this.BinaryData = SerializationUtilities.SerializeKeyMetadata(keyMetadata, encodingOption); }
public static ArraySegment <byte> SerializeMetadataPropertyBag(SaveWorkflowCommand saveWorkflowCommand, InstancePersistenceContext context, InstanceEncodingOption instanceEncodingOption) { IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(instanceEncodingOption); Dictionary <XName, object> propertyBagToSerialize = new Dictionary <XName, object>(); if (context.InstanceView.InstanceMetadataConsistency == InstanceValueConsistency.None) { foreach (KeyValuePair <XName, InstanceValue> metadataProperty in context.InstanceView.InstanceMetadata) { if ((metadataProperty.Value.Options & InstanceValueOptions.WriteOnly) == 0) { propertyBagToSerialize.Add(metadataProperty.Key, metadataProperty.Value.Value); } } } foreach (KeyValuePair <XName, InstanceValue> metadataChange in saveWorkflowCommand.InstanceMetadataChanges) { if (metadataChange.Value.IsDeletedValue) { if (context.InstanceView.InstanceMetadataConsistency == InstanceValueConsistency.None) { propertyBagToSerialize.Remove(metadataChange.Key); } else { propertyBagToSerialize[metadataChange.Key] = new DeletedMetadataValue(); } } else if ((metadataChange.Value.Options & InstanceValueOptions.WriteOnly) == 0) { propertyBagToSerialize[metadataChange.Key] = metadataChange.Value.Value; } } if (propertyBagToSerialize.Count > 0) { return(serializer.SerializePropertyBag(propertyBagToSerialize)); } return(new ArraySegment <byte>()); }
public static Dictionary<XName, InstanceValue> DeserializeKeyMetadata(byte[] serializedKeyMetadata, InstanceEncodingOption encodingOption) { return DeserializeMetadataPropertyBag(serializedKeyMetadata, encodingOption); }
public static Dictionary <XName, InstanceValue> DeserializePropertyBag(byte[] primitiveDataProperties, byte[] complexDataProperties, InstanceEncodingOption encodingOption) { IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); Dictionary <XName, InstanceValue> properties = new Dictionary <XName, InstanceValue>(); Dictionary <XName, object>[] propertyBags = new Dictionary <XName, object> [2]; if (primitiveDataProperties != null) { propertyBags[0] = (Dictionary <XName, object>)serializer.DeserializeValue(primitiveDataProperties); } if (complexDataProperties != null) { propertyBags[1] = serializer.DeserializePropertyBag(complexDataProperties); } foreach (Dictionary <XName, object> propertyBag in propertyBags) { if (propertyBag != null) { foreach (KeyValuePair <XName, object> property in propertyBag) { properties.Add(property.Key, new InstanceValue(property.Value)); } } } return(properties); }
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 <Guid, IDictionary <XName, InstanceValue> > 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 <XName, InstanceValue>()); } } if (loadByKeycommand != null) { foreach (KeyValuePair <Guid, IDictionary <XName, InstanceValue> > keyEntry in loadByKeycommand.InstanceKeysToAssociate) { base.InstancePersistenceContext.AssociatedInstanceKey(keyEntry.Key); if (keyEntry.Value != null) { foreach (KeyValuePair <XName, InstanceValue> 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); }
public static object DeserializeObject(byte[] serializedObject, InstanceEncodingOption encodingOption) { return ObjectSerializerFactory.GetObjectSerializer(encodingOption).DeserializeValue(serializedObject); }
public static ArraySegment<byte>[] SerializePropertyBag(IDictionary<XName, InstanceValue> properties, InstanceEncodingOption encodingOption) { ArraySegment<byte>[] segmentArray = new ArraySegment<byte>[4]; if (properties.Count > 0) { IObjectSerializer objectSerializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); XmlPropertyBag bag = new XmlPropertyBag(); XmlPropertyBag bag2 = new XmlPropertyBag(); Dictionary<XName, object> dictionary = new Dictionary<XName, object>(); Dictionary<XName, object> dictionary2 = new Dictionary<XName, object>(); Dictionary<XName, object>[] dictionaryArray = new Dictionary<XName, object>[] { bag, dictionary, bag2, dictionary2 }; foreach (KeyValuePair<XName, InstanceValue> pair in properties) { bool flag = XmlPropertyBag.GetPrimitiveType(pair.Value.Value) == PrimitiveType.Unavailable; int index = (((pair.Value.Options & InstanceValueOptions.WriteOnly) == InstanceValueOptions.WriteOnly) ? 2 : 0) + (flag ? 1 : 0); dictionaryArray[index].Add(pair.Key, pair.Value.Value); } bag2.Remove(SqlWorkflowInstanceStoreConstants.StatusPropertyName); bag2.Remove(SqlWorkflowInstanceStoreConstants.LastUpdatePropertyName); bag2.Remove(SqlWorkflowInstanceStoreConstants.PendingTimerExpirationPropertyName); dictionary2.Remove(SqlWorkflowInstanceStoreConstants.BinaryBlockingBookmarksPropertyName); for (int i = 0; i < dictionaryArray.Length; i++) { if (dictionaryArray[i].Count > 0) { if (dictionaryArray[i] is XmlPropertyBag) { segmentArray[i] = objectSerializer.SerializeValue(dictionaryArray[i]); } else { segmentArray[i] = objectSerializer.SerializePropertyBag(dictionaryArray[i]); } } } } return segmentArray; }
public static List <CorrelationKey> BuildKeyList(IDictionary <Guid, IDictionary <XName, InstanceValue> > keys, InstanceEncodingOption encodingOption) { List <CorrelationKey> list = new List <CorrelationKey>(); if (keys != null) { foreach (KeyValuePair <Guid, IDictionary <XName, InstanceValue> > pair in keys) { list.Add(new CorrelationKey(pair.Key, pair.Value, encodingOption)); } } return(list); }