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);
        }
Exemple #6
0
        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;
        }
Exemple #11
0
        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);
        }
Exemple #12
0
 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());
     }
 }
Exemple #13
0
 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());
     }
 }
Exemple #14
0
 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);
        }
Exemple #16
0
        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;
 }
Exemple #42
0
        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);
        }