/// <summary> /// Initiates an asynchronous get of the binary file specified by fileId or fileGuid /// Intended to be used by an IHttpAsyncHandler /// </summary> /// <param name="callback">The callback.</param> /// <param name="context">The context.</param> /// <param name="fileGuid">The file unique identifier.</param> /// <param name="fileId">The file identifier.</param> /// <returns></returns> private IAsyncResult BeginGet(AsyncCallback callback, HttpContext context, Guid fileGuid, int?fileId) { SqlConnection conn = new SqlConnection(string.Format("{0};Asynchronous Processing=true;", ConfigurationManager.ConnectionStrings["RockContext"].ConnectionString)); conn.Open(); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "spCore_BinaryFileGet"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@Id", fileId.HasValue ? fileId.Value : 0)); cmd.Parameters.Add(new SqlParameter("@Guid", fileGuid)); // store our Command to be later retrieved by EndGet context.AddOrReplaceItem("Rock.Model.BinaryFileService:SqlCommand", cmd); // start async DB read return(cmd.BeginExecuteReader( callback, context, CommandBehavior.SequentialAccess | // doesn't load whole column into memory CommandBehavior.SingleRow | // performance improve since we only want one row CommandBehavior.CloseConnection)); // close connection immediately after read }