Beispiel #1
0
        static void DeserializeTrackingProfileString()
        {
            string workflowTerminatedTrackingProfile = @"<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
<TrackingProfile xmlns=""http://schemas.microsoft.com/winfx/2006/workflow/trackingprofile"" version=""2.0.0"">
    <TrackPoints>
        <WorkflowTrackPoint>
            <MatchingLocation>
                <WorkflowTrackingLocation>
                    <TrackingWorkflowEvents>
                        <TrackingWorkflowEvent>Terminated</TrackingWorkflowEvent>
                    </TrackingWorkflowEvents>
                </WorkflowTrackingLocation>
            </MatchingLocation>
        </WorkflowTrackPoint>
    </TrackPoints>
</TrackingProfile>";
            TrackingProfileSerializer trackingProfileSerializer = new TrackingProfileSerializer();
            using (StringReader stringReader = new StringReader(workflowTerminatedTrackingProfile))
            {
                TrackingProfile trackingProfile = trackingProfileSerializer.Deserialize(stringReader);
                Console.WriteLine("Tracking Profile Version " + trackingProfile.Version);
            }
        }
        /// <summary>
        /// Primary constructor
        /// </summary>
        /// <param name="root"></param>
        /// <param name="workflowType"></param>
        /// <param name="profile"></param>
        internal RTTrackingProfile(TrackingProfile profile, Activity root, Type serviceType)
        {
            if (null == profile)
                throw new ArgumentNullException("profile");
            if (null == root)
                throw new ArgumentNullException("root");
            if (null == serviceType)
                throw new ArgumentNullException("serviceType");

            _workflowType = root.GetType();
            _serviceType = serviceType;
            //
            // "Clone" a private copy in case the tracking service holds a reference to 
            // the profile it gave us and attempts to modify it at a later point
            TrackingProfileSerializer tps = new TrackingProfileSerializer();

            StringWriter writer = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
            StringReader reader = null;

            TrackingProfile privateProfile = null;

            try
            {
                //
                // Let exceptions bubble back to the tracking service - 
                // the profile must be valid per the schema.
                tps.Serialize(writer, profile);
                reader = new StringReader(writer.ToString());
                privateProfile = tps.Deserialize(reader);
            }
            finally
            {
                if (null != reader)
                    reader.Close();

                if (null != writer)
                    writer.Close();
            }
            _profile = privateProfile;

            CheckAllActivities((Activity)root);
        }
Beispiel #3
0
        private static Version GetTrackingProfileVersion(Version version)
        {
            TrackingProfile profile = null;
            SqlDataReader reader = null;
            using (SqlCommand command = new SqlCommand())
            {
                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = "dbo.GetTrackingProfile";
                command.Connection = new SqlConnection(connectionString);
                SqlParameter typeFullName = new SqlParameter();
                typeFullName.ParameterName = "@TypeFullName";
                typeFullName.SqlDbType = SqlDbType.NVarChar;
                typeFullName.SqlValue = typeof(SimpleWorkflow).FullName;
                command.Parameters.Add(typeFullName);

                SqlParameter assemblyFullName = new SqlParameter();
                assemblyFullName.ParameterName = "@AssemblyFullName";
                assemblyFullName.SqlDbType = SqlDbType.NVarChar;
                assemblyFullName.SqlValue = typeof(SimpleWorkflow).Assembly.FullName;
                command.Parameters.Add(assemblyFullName);

                SqlParameter versionId = new SqlParameter();
                versionId.ParameterName = "@Version";
                versionId.SqlDbType = SqlDbType.VarChar;
                command.Parameters.Add(versionId);

                SqlParameter createDefault = new SqlParameter();
                createDefault.ParameterName = "@CreateDefault";
                createDefault.SqlDbType = SqlDbType.Bit;
                createDefault.SqlValue = 0;
                command.Parameters.Add(createDefault);

                command.Connection.Open();
                reader = command.ExecuteReader();
                if (reader.Read())
                {
                    string profileXml = reader[0] as string;
                    if (null != profileXml)
                    {
                        TrackingProfileSerializer serializer = new TrackingProfileSerializer();
                        StringReader stringReader = null;
                        try
                        {
                            stringReader = new StringReader(profileXml);
                            profile = serializer.Deserialize(stringReader);
                        }
                        finally
                        {
                            if (stringReader != null)
                                stringReader.Close();
                        }
                    }
                }
            }
            if (profile != null)
                return new Version(profile.Version.Major, profile.Version.MajorRevision, profile.Version.Minor, profile.Version.MinorRevision + 1);
            else
                return new Version(version.Major, version.MajorRevision, version.Minor, version.MinorRevision + 1);
        }
 internal RTTrackingProfile(TrackingProfile profile, Activity root, Type serviceType)
 {
     this._activities = new Dictionary<string, List<ActivityTrackPointCacheItem>>();
     this._activitiesIgnore = new List<string>();
     this._user = new Dictionary<string, List<UserTrackPoint>>();
     this._userIgnore = new List<string>();
     if (profile == null)
     {
         throw new ArgumentNullException("profile");
     }
     if (root == null)
     {
         throw new ArgumentNullException("root");
     }
     if (null == serviceType)
     {
         throw new ArgumentNullException("serviceType");
     }
     this._workflowType = root.GetType();
     this._serviceType = serviceType;
     TrackingProfileSerializer serializer = new TrackingProfileSerializer();
     StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
     StringReader reader = null;
     TrackingProfile profile2 = null;
     try
     {
         serializer.Serialize(writer, profile);
         reader = new StringReader(writer.ToString());
         profile2 = serializer.Deserialize(reader);
     }
     finally
     {
         if (reader != null)
         {
             reader.Close();
         }
         if (writer != null)
         {
             writer.Close();
         }
     }
     this._profile = profile2;
     this.CheckAllActivities(root);
 }
        /// <summary>
        /// Retrieves a profile from the SQL Tracking Database
        /// </summary>        
        /// <param name="workflowType">The workflow type to retrieve the profile for</param>
        /// /// <param name="version">The version of the workflow to retrieve.  If null, the version is ignored.</param>
        /// <param name="createDefault">When true, creates a default tracking profile if no profile currently exists</param>
        /// <returns></returns>     
        private TrackingProfile GetWorkflowProfile(Type workflowType, Version version, bool createDefault)
        {
            SqlDataReader reader = null;
            TrackingProfile profile = null;            
            try
            {
                using (SqlConnection connection = new SqlConnection(ConnectionString))
                {
                    using (SqlCommand command = new SqlCommand())
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        command.CommandText = "[dbo].[GetTrackingProfile]";
                        command.Connection = connection;

                        SqlParameter typeFullName = new SqlParameter("@TypeFullName", workflowType.FullName);
                        SqlParameter assemblyFullName = new SqlParameter("@AssemblyFullName", workflowType.Assembly.FullName);
                        SqlParameter createDefaultParameter = new SqlParameter("@CreateDefault", createDefault ? 1 : 0);

                        command.Parameters.Add(typeFullName);
                        command.Parameters.Add(assemblyFullName);
                        command.Parameters.Add(createDefaultParameter);

                        //Filter by version as well, if specified
                        if (version != null)
                        {
                            SqlParameter versionParameter = new SqlParameter("@Version", version.ToString());
                            command.Parameters.Add(versionParameter);
                        }

                        connection.Open();
                        reader = command.ExecuteReader(CommandBehavior.CloseConnection);
                        if (reader.Read())
                        {
                            if (reader.IsDBNull(0))
                            {
                                return null;
                            }

                            string tmp = reader.GetString(0);
                            TrackingProfileSerializer serializer = new TrackingProfileSerializer();
                            StringReader pReader = null;

                            try
                            {
                                pReader = new StringReader(tmp);
                                profile = serializer.Deserialize(pReader);
                            }
                            finally
                            {
                                if (null != pReader)
                                    pReader.Close();
                            }
                        }
                    }
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show(string.Format("Error retrieving profile: {0}", ex.Message), "Error");
            }         
            return profile;
        }
 /// <summary>
 /// Read profile from path
 /// </summary>
 /// <param name="path"></param>
 public void ReadProfile(string path)
 {
     using (StreamReader reader = new StreamReader(path))
     {
         TrackingProfileSerializer serializer = new TrackingProfileSerializer();
         TrackingProfile = serializer.Deserialize(reader);
     }
 }
        // Reads a file containing an XML representation of a Tracking Profile
        private static TrackingProfile GetProfile()
        {
            FileStream fileStream = null;
            try
            {
                string trackingProfileFile = Environment.CurrentDirectory + "\\profile.xml";
                Console.WriteLine("trackingProfileFile is {0}", trackingProfileFile);
                if (File.Exists(trackingProfileFile))
                {
                    Console.WriteLine("Reading trackingProfile from {0}", trackingProfileFile);
                    fileStream = File.OpenRead(trackingProfileFile);
                    if (null == fileStream)
                    {
                        Console.WriteLine("fileStream is null");
                        return null;
                    }
                    StreamReader reader = new StreamReader(fileStream);
                    TrackingProfile profile;
                    TrackingProfileSerializer trackingProfileSerializer = new TrackingProfileSerializer();
                    profile = trackingProfileSerializer.Deserialize(reader);

                    return profile;
                }
                else
                {
                    Console.WriteLine("trackingProfileFile {0} doesn't exist", trackingProfileFile);
                    return null;
                }
            }
            catch (TrackingProfileDeserializationException tpex)
            { 
                Console.WriteLine("Encountered a deserialization exception.");
                foreach (ValidationEventArgs validationError in tpex.ValidationEventArgs)
                {
                    Console.WriteLine("Exception Message: {0}", validationError.Message);
                }
                return null;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Encountered an exception. Exception Source: {0}, Exception Message: {1}", ex.Source, ex.Message);
                return null;
            }
            finally
            {
                if (fileStream != null)
                    fileStream.Close();
            }
        }