public static String Serialize(InvokeResultDescriptor cs)
        {
            StringBuilder sb = new StringBuilder();

            if (cs != null)
            {
                XmlWriter writer = XmlWriter.Create(sb);
                cs.Serialize(writer);
                writer.Close();
            }
            return sb.ToString();
        }
        public static String Serialize(InvokeResultDescriptor cs)
        {
            StringBuilder sb = new StringBuilder();

            if (cs != null)
            {
                XmlWriter writer = XmlWriter.Create(sb);
                cs.Serialize(writer);
                writer.Close();
            }
            return(sb.ToString());
        }
        public static InvokeResultDescriptor Deserialize(String str)
        {
            if (!String.IsNullOrEmpty(str))
            {
                StringReader str_reader = new StringReader(str);
                XmlReader    reader     = XmlReader.Create(str_reader);

                return(InvokeResultDescriptor.Deserialize(reader));
            }
            else
            {
                return(null);
            }
        }
        public virtual String PerformOlapServiceAction(String schemaType, String schema)
        {
            DateTime start = DateTime.Now;
            try
            {
                System.Diagnostics.Trace.TraceInformation("{0} PerformOlapServiceAction \r\n SCHEMA_TYPE: {1} \r\n SCHEMA: {2} \r\n", 
                    DateTime.Now.ToString(), schemaType, schema);

                object type = OlapActionTypes.Parse(typeof(OlapActionTypes), schemaType, true);
                if (type != null)
                {
                    OlapActionTypes actionType = (OlapActionTypes)type;
                    switch (actionType)
                    {
                        case OlapActionTypes.GetMetadata:
                            return GetMetaData(schema);
                        case OlapActionTypes.StorageAction:
                            return PerformStorageAction(schema);
                        case OlapActionTypes.ExportToExcel:
                            return ExportToExcel(schema);
                        case OlapActionTypes.ExecuteQuery:
                            return ExecuteQuery(schema);
                    }
                }

                InvokeResultDescriptor result = new InvokeResultDescriptor();
                return InvokeResultDescriptor.Serialize(result);
            }
            catch (Exception ex)
            {
                InvokeResultDescriptor result = new InvokeResultDescriptor();
                result.Content = ex.ToString();
                result.ContentType = InvokeContentType.Error;
                System.Diagnostics.Trace.TraceError("{0} PerformOlapServiceAction ERROR: {1}\r\n",
                    DateTime.Now.ToString(), ex.ToString());
                return InvokeResultDescriptor.Serialize(result);
            }
            finally {
                System.Diagnostics.Trace.TraceInformation("{0} PerformOlapServiceAction: {1} completed \r\n time: {2} \r\n",
                    DateTime.Now.ToString(), schemaType, (DateTime.Now - start).ToString());
            }
        }
 String PerformStorageAction(String schema)
 {
     InvokeResultDescriptor result = new InvokeResultDescriptor();
     String res = String.Empty;
     try
     {
         StorageActionArgs args = XmlSerializationUtility.XmlStr2Obj<StorageActionArgs>(schema);
         if (args != null)
         {
             FileStorageProvider storageProvider = new FileStorageProvider();
             switch (args.ActionType)
             {
                 case StorageActionTypes.Save:
                     args.FileDescription.ContentFileName = args.FileDescription.Description.Name + ".content." + FileStorageProvider.GetFilteExtension(args.ContentType);
                     storageProvider.Save(HttpContext.Current.User, args.FileDescription.Description.Name + "." + FileStorageProvider.GetFilteExtension(args.ContentType), XmlSerializationUtility.Obj2XmlStr(args.FileDescription));
                     storageProvider.Save(HttpContext.Current.User, args.FileDescription.ContentFileName, args.Content);
                     break;
                 case StorageActionTypes.Load:
                     res = storageProvider.Load(HttpContext.Current.User, args.FileDescription.ContentFileName);
                     break;
                 case StorageActionTypes.GetList:
                     res = XmlSerializationUtility.Obj2XmlStr(storageProvider.GetList(HttpContext.Current.User, "*." + FileStorageProvider.GetFilteExtension(args.ContentType)), Common.Namespace);
                     break;
                 case StorageActionTypes.Clear:
                     res = XmlSerializationUtility.Obj2XmlStr(storageProvider.Clear(HttpContext.Current.User, "*." + FileStorageProvider.GetFilteExtension(args.ContentType)));
                     break;
                 case StorageActionTypes.Delete:
                     storageProvider.Delete(HttpContext.Current.User, args.FileDescription.Description.Name + "." + FileStorageProvider.GetFilteExtension(args.ContentType));
                     storageProvider.Delete(HttpContext.Current.User, args.FileDescription.ContentFileName);
                     res = XmlSerializationUtility.Obj2XmlStr(storageProvider.GetList(HttpContext.Current.User, "*." + FileStorageProvider.GetFilteExtension(args.ContentType)), Common.Namespace);
                     break;
             }
         }
         result.Content = res;
     }
     catch (Exception)
     {
         throw;
     }
     return InvokeResultDescriptor.Serialize(result);
 }
        private String ExportToExcel(String schema)
        {
            InvokeResultDescriptor result = new InvokeResultDescriptor();
            String res = String.Empty;
            try
            {
                String sessionId = String.Empty;
                String connection = String.Empty;
                try
                {
                    MdxQueryArgs args = XmlSerializationUtility.XmlStr2Obj<MdxQueryArgs>(schema);
                    if (args != null)
                    {
                        sessionId = args.SessionId;
                        connection = args.Connection;
                        DefaultQueryExecuter queryExecuter = new DefaultQueryExecuter(GetConnection(args.Connection));
                        if (args.Queries.Count > 0)
                        {
                            res = queryExecuter.GetCellSetDescription(args.Queries[0], ref sessionId);
                        }
                    }
                }
                catch (AdomdConnectionException connection_ex)
                {
                    result.Content = connection_ex.Message;
                    result.ContentType = InvokeContentType.Error;
                }
                catch (AdomdErrorResponseException response_ex)
                {
                    result.Content = response_ex.Message;
                    result.ContentType = InvokeContentType.Error;
                }
                catch (AdomdUnknownResponseException unknown_ex)
                {
                    result.Content = unknown_ex.Message;
                    result.ContentType = InvokeContentType.Error;
                }
                catch (InvalidOperationException invalid_ex)
                {
                    result.Content = invalid_ex.Message;
                    result.ContentType = InvokeContentType.Error;
                }

                if (!String.IsNullOrEmpty(res))
                {
                    CellSetData cs = CellSetData.Deserialize(res);
                    PivotDataProvider pivotProvider = new PivotDataProvider(new CellSetDataProvider(cs));
                    res = ExportHelper.ExportToExcel(pivotProvider);
                }

                result.Content = res;
                if (UseCompress)
                {
                    // Архивация строки
                    String compesed = ZipCompressor.CompressAndConvertToBase64String(res);
                    result.Content = compesed;
                    result.IsArchive = true;
                }
                result.ContentType = InvokeContentType.MultidimData;
                result.Headers.Add(new Header(InvokeResultDescriptor.SESSION_ID, sessionId));
                result.Headers.Add(new Header(InvokeResultDescriptor.CONNECTION_ID, connection));
            }
            catch (Exception)
            {
                throw;
            }
            return InvokeResultDescriptor.Serialize(result);
        }
        String ExecuteQuery(String schema)
        {
            InvokeResultDescriptor result = new InvokeResultDescriptor();
            String res = String.Empty;
            try
            {
                String sessionId = String.Empty;
                MdxQueryArgs args = XmlSerializationUtility.XmlStr2Obj<MdxQueryArgs>(schema);
                if (args != null)
                {
                    sessionId = args.SessionId;
                    DefaultQueryExecuter queryExecuter = new DefaultQueryExecuter(GetConnection(args.Connection));
                    if (args.Queries.Count > 0)
                    {
                        result.ContentType = InvokeContentType.MultidimData;

                        switch (args.Type)
                        {
                            case QueryTypes.Update:
                            case QueryTypes.CommitTransaction:
                            case QueryTypes.RollbackTransaction:
                                List<String> results = new List<String>();
                                result.ContentType = InvokeContentType.UpdateResult;
                                foreach (var query in args.Queries)
                                {
                                    try
                                    {
                                        // Method return a value of one (1). 
                                        queryExecuter.ExecuteNonQuery(query, ref sessionId);
                                        results.Add(String.Empty);
                                    }
                                    catch (AdomdConnectionException connection_ex)
                                    {
                                        results.Add(connection_ex.Message);
                                    }
                                    catch (AdomdErrorResponseException response_ex)
                                    {
                                        results.Add(response_ex.Message);
                                    }
                                    catch (AdomdUnknownResponseException unknown_ex)
                                    {
                                        results.Add(unknown_ex.Message);
                                    }
                                    catch(InvalidOperationException invalid_ex)
                                    {
                                        results.Add(invalid_ex.Message);
                                    }
                                }
                                res = XmlSerializationUtility.Obj2XmlStr(results, Common.Namespace);
                                break;
                            case QueryTypes.Select:
                                try
                                {
                                    res = queryExecuter.GetCellSetDescription(args.Queries[0], ref sessionId);
                                }
                                catch (AdomdConnectionException connection_ex)
                                {
                                    res = connection_ex.Message;
                                    result.ContentType = InvokeContentType.Error;
                                }
                                catch (AdomdErrorResponseException response_ex)
                                {
                                    res = response_ex.Message;
                                    result.ContentType = InvokeContentType.Error;
                                }
                                catch (AdomdUnknownResponseException unknown_ex)
                                {
                                    res = unknown_ex.Message;
                                    result.ContentType = InvokeContentType.Error;
                                }
                                catch (InvalidOperationException invalid_ex)
                                {
                                    res = invalid_ex.Message;
                                    result.ContentType = InvokeContentType.Error;
                                }
                                break;
                            case QueryTypes.DrillThrough:
                                try
                                {
                                    var table = queryExecuter.ExecuteReader(args.Queries[0], ref sessionId);
                                    if (table != null)
                                    {
                                        res = XmlSerializationUtility.Obj2XmlStr(DataTableHelper.Create(table));
                                    }
                                }
                                catch (AdomdConnectionException connection_ex)
                                {
                                    res = connection_ex.Message;
                                    result.ContentType = InvokeContentType.Error;
                                }
                                catch (AdomdErrorResponseException response_ex)
                                {
                                    res = response_ex.Message;
                                    result.ContentType = InvokeContentType.Error;
                                }
                                catch (AdomdUnknownResponseException unknown_ex)
                                {
                                    res = unknown_ex.Message;
                                    result.ContentType = InvokeContentType.Error;
                                }
                                catch (InvalidOperationException invalid_ex)
                                {
                                    res = invalid_ex.Message;
                                    result.ContentType = InvokeContentType.Error;
                                }
                                break;
                        }
                    }
                }
                result.Content = res;
                System.Diagnostics.Debug.WriteLine("CellSetData size: " + res.Length);

                if (UseCompress)
                {
                    DateTime start = DateTime.Now;
                    // Архивация строки
                    String compesed = ZipCompressor.CompressAndConvertToBase64String(res);
                    System.Diagnostics.Debug.WriteLine("CellSetData compression time: " + (DateTime.Now - start).ToString());
                    System.Diagnostics.Debug.WriteLine("CellSetData compressed size: " + compesed.Length);

                    result.Content = compesed;
                    result.IsArchive = true;
                }
                
                result.Headers.Add(new Header(InvokeResultDescriptor.SESSION_ID, sessionId));
                result.Headers.Add(new Header(InvokeResultDescriptor.CONNECTION_ID, args.Connection));
            }
            catch (Exception ex)
            {
                throw;
            }
            return InvokeResultDescriptor.Serialize(result);
        }
        String GetMetaData(String schema)
        {
            InvokeResultDescriptor result = new InvokeResultDescriptor();
            String res = null;
            try
            {
                MetadataQuery args = XmlSerializationUtility.XmlStr2Obj<MetadataQuery>(schema);

                if (args != null)
                {
                    switch (args.QueryType)
                    {
                        case MetadataQueryType.GetCubes:
                            res = GetCubes(args);
                            break;
                        case MetadataQueryType.GetMeasures:
                            res = GetMeasures(args);
                            break;
                        case MetadataQueryType.GetKPIs:
                            res = GetKPIs(args);
                            break;
                        case MetadataQueryType.GetLevels:
                            res = GetLevels(args);
                            break;
                        case MetadataQueryType.GetDimensions:
                            res = GetDimensions(args);
                            break;
                        case MetadataQueryType.GetHierarchies:
                            res = GetHierarchies(args);
                            break;
                        case MetadataQueryType.GetDimension:
                            res = GetDimension(args);
                            break;
                        case MetadataQueryType.GetHierarchy:
                            res = GetHierarchy(args);
                            break;
                        case MetadataQueryType.GetMeasureGroups:
                            res = GetMeasureGroups(args);
                            break;
                        case MetadataQueryType.GetLevelProperties:
                            res = GetLevelProperties(args);
                            break;
                        case MetadataQueryType.GetCubeMetadata:
                        case MetadataQueryType.GetCubeMetadata_AllMembers:
                            res = GetCubeMetadata(args);
                            break;
                    }
                }
                result.Content = res;
                if (UseCompress)
                {
                    // Архивация строки
                    String compesed = ZipCompressor.CompressAndConvertToBase64String(res);
                    result.Content = compesed;
                    result.IsArchive = true;
                }
                result.ContentType = InvokeContentType.MultidimData;
            }
            catch (AdomdConnectionException connection_ex)
            {
                result.Content = connection_ex.Message;
                result.ContentType = InvokeContentType.Error;
            }
            catch (AdomdErrorResponseException response_ex)
            {
                result.Content = response_ex.Message;
                result.ContentType = InvokeContentType.Error;
            }
            catch (OlapMetadataResponseException metadata_ex)
            {
                result.Content = metadata_ex.Message;
                result.ContentType = InvokeContentType.Error;
            }
            catch (Exception)
            {
                throw;
            }
            return InvokeResultDescriptor.Serialize(result);
        }
 public DataLoaderEventArgs(InvokeResultDescriptor result, Exception error, object state)
 {
     Error = error;
     m_Result = result;
     UserState = state;
 }
        internal static InvokeResultDescriptor Deserialize(XmlReader reader)
        {
            if (reader != null)
            {
                try
                {
                    if (!(reader.NodeType == XmlNodeType.Element &&
                        reader.Name == "InvokeResultDescriptor"))
                    {
                        reader.ReadToFollowing("InvokeResultDescriptor");
                    }

                    InvokeResultDescriptor target = new InvokeResultDescriptor();
                    // Начало - InvokeResultDescriptor
                    reader.ReadStartElement("InvokeResultDescriptor");

                    // Свойства
                    reader.ReadStartElement("Content");
                    if (reader.NodeType == XmlNodeType.Text)
                    {
                        target.Content = reader.ReadContentAsString();
                        reader.ReadEndElement();
                    }

                    reader.ReadStartElement("ContentType");
                    if (reader.NodeType == XmlNodeType.Text)
                    {
                        target.ContentType = (InvokeContentType)(InvokeContentType.Parse(typeof(InvokeContentType), reader.ReadContentAsString(), true));
                        reader.ReadEndElement();
                    }

                    reader.ReadStartElement("IsArchive");
                    if (reader.NodeType == XmlNodeType.Text)
                    {
                        target.IsArchive = bool.Parse(reader.ReadContentAsString());
                        reader.ReadEndElement();
                    }

                    // Элементы
                    Header header = null;
                    reader.ReadStartElement("Headers");
                    do
                    {
                        header = Header.Deserialize(reader);
                        if (header != null)
                            target.Headers.Add(header);
                    } while (header != null);
                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == "Headers")
                    {
                        reader.ReadEndElement();
                    }

                    // Конец - InvokeResultDescriptor
                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == "InvokeResultDescriptor")
                    {
                        reader.ReadEndElement();
                    }
                    return target;
                }
                catch (XmlException)
                {
                    throw;
                    //return null;
                }
            }
            return null;
        }
        internal static InvokeResultDescriptor Deserialize(XmlReader reader)
        {
            if (reader != null)
            {
                try
                {
                    if (!(reader.NodeType == XmlNodeType.Element &&
                          reader.Name == "InvokeResultDescriptor"))
                    {
                        reader.ReadToFollowing("InvokeResultDescriptor");
                    }

                    InvokeResultDescriptor target = new InvokeResultDescriptor();
                    // Начало - InvokeResultDescriptor
                    reader.ReadStartElement("InvokeResultDescriptor");

                    // Свойства
                    reader.ReadStartElement("Content");
                    if (reader.NodeType == XmlNodeType.Text)
                    {
                        target.Content = reader.ReadContentAsString();
                        reader.ReadEndElement();
                    }

                    reader.ReadStartElement("ContentType");
                    if (reader.NodeType == XmlNodeType.Text)
                    {
                        target.ContentType = (InvokeContentType)(InvokeContentType.Parse(typeof(InvokeContentType), reader.ReadContentAsString(), true));
                        reader.ReadEndElement();
                    }

                    reader.ReadStartElement("IsArchive");
                    if (reader.NodeType == XmlNodeType.Text)
                    {
                        target.IsArchive = bool.Parse(reader.ReadContentAsString());
                        reader.ReadEndElement();
                    }

                    // Элементы
                    Header header = null;
                    reader.ReadStartElement("Headers");
                    do
                    {
                        header = Header.Deserialize(reader);
                        if (header != null)
                        {
                            target.Headers.Add(header);
                        }
                    } while (header != null);
                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == "Headers")
                    {
                        reader.ReadEndElement();
                    }

                    // Конец - InvokeResultDescriptor
                    if (reader.NodeType == XmlNodeType.EndElement &&
                        reader.Name == "InvokeResultDescriptor")
                    {
                        reader.ReadEndElement();
                    }
                    return(target);
                }
                catch (XmlException)
                {
                    throw;
                    //return null;
                }
            }
            return(null);
        }