Пример #1
0
        public async Task <HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            //response = new HttpResponseMessage();
            //HttpResponseMessage respMessage = null;
            //string ResponseResult = "";
            //string requestUri = "";
            try
            {
                if (ExtraInfo["FormatFromUser"] == "mydb")
                {
                    return(SendToMyDB());
                    //response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                }
                else
                {
                    return(SendToUser());
                }
                //logging

                //return processDBqueryResults(stream);
            }
            catch (Exception e)
            {
                if (ExtraInfo["DoReturnHtml"].ToLower() == "true")
                {
                    HttpStatusCode errorCode    = HttpStatusCode.InternalServerError;
                    string         reasonPhrase = errorCode.ToString();
                    string         errorMessage = e.Message + ((e.InnerException != null) ? (": " + e.InnerException.Message) : "");

                    SciserverLogging Logger = new SciserverLogging();
                    ActivityInfo.Exception = e;
                    Logger.LogActivity(ActivityInfo, "ErrorMessage");

                    StringBuilder strbldr = new StringBuilder();
                    StringWriter  sw      = new StringWriter(strbldr);
                    using (JsonWriter writer = new JsonTextWriter(sw))
                    {
                        writer.WriteStartObject();
                        writer.WritePropertyName("ErrorCode");
                        writer.WriteValue((int)errorCode);
                        writer.WritePropertyName("ErrorType");
                        writer.WriteValue(errorCode.ToString());
                        writer.WritePropertyName("ErrorMessage");
                        writer.WriteValue(errorMessage);
                        writer.WritePropertyName("LogMessageID");
                        writer.WriteValue(Logger.message.MessageId);
                        writer.WritePropertyName("LogTime");
                        writer.WriteValue(Logger.message.Time);
                    }
                    string TechnicalErrorInfo = strbldr.ToString();

                    strbldr = new StringBuilder();
                    sw      = new StringWriter(strbldr);
                    using (JsonWriter writer = new JsonTextWriter(sw))
                    {
                        writer.WriteStartObject();
                        writer.WritePropertyName("ErrorCode");
                        writer.WriteValue((int)errorCode);
                        writer.WritePropertyName("ErrorType");
                        writer.WriteValue(errorCode.ToString());
                        writer.WritePropertyName("ErrorMessage");
                        writer.WriteValue(errorMessage);
                        writer.WritePropertyName("LogMessageID");
                        writer.WriteValue(Logger.message.MessageId);
                        writer.WritePropertyName("username");
                        writer.WriteValue(Logger.user_name);
                        writer.WritePropertyName("userid");
                        writer.WriteValue(Logger.userid);
                        writer.WritePropertyName("pageurl");
                        writer.WriteValue(ActivityInfo.URI);
                        writer.WritePropertyName("referrer");
                        writer.WriteValue(ActivityInfo.Referrer);
                        writer.WritePropertyName("StackTrace");
                        writer.WriteValue(ActivityInfo.Exception.StackTrace);
                        writer.WritePropertyName("InnerTrace");
                        writer.WriteValue(ActivityInfo.Exception.InnerException != null ? ActivityInfo.Exception.InnerException.StackTrace : "");
                        writer.WritePropertyName("LogTime");
                        writer.WriteValue(Logger.message.Time);
                        writer.WritePropertyName("ClientIP");
                        writer.WriteValue(Logger.message.ClientIP);
                    }
                    string TechnicalErrorInfoAll = strbldr.ToString();

                    bool           IsSuccess = false;
                    ProcessDataSet proc      = new ProcessDataSet(query, format, TaskName, ExtraInfo, errorMessage, IsSuccess, positionType, queryType, TechnicalErrorInfo, TechnicalErrorInfoAll);
                    response.Content = proc.GetContent(ResultsDataSet);// this will log
                    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
                    return(response);
                }
                else
                {
                    throw new Exception(e.Message);//throwing the exception takes to CustomFilter.cs, where error logging is performed and the error response is returned to the user.
                }
            }
        }
Пример #2
0
        public HttpResponseMessage SendToUser()
        {
            /*
             *      SqlConnection Conn = new SqlConnection(KeyWords.DBconnectionString);
             *      await Conn.OpenAsync();
             *      SqlCommand Cmd = Conn.CreateCommand();
             *      Cmd.CommandText = this.query;
             *      //Cmd.CommandTimeout = KeyWords.DatabaseSearchTimeout == null || KeyWords.DatabaseSearchTimeout == "" ? 600 : Int32.Parse(KeyWords.DatabaseSearchTimeout);
             *      Cmd.CommandTimeout = Int32.Parse(KeyWords.DatabaseSearchTimeout);
             *      //SqlDataReader reader = await Cmd.ExecuteReaderAsync();
             *      var Adapter = new SqlDataAdapter(Cmd);
             *      Adapter.Fill(ResultsDataSet);
             *      Conn.Close();
             */
            RunQuery();

            //BinaryFormatter fmt = new BinaryFormatter();
            Action <Stream, HttpContent, TransportContext> WriteToStream = null;
            BinaryFormatter fmt;

            // do not add the SQL query as a second table in vo services and csv/txt/fits formats.
            if (!format.Contains("csv") && !format.Contains("txt") && !format.Contains("text/plain") && !format.Contains("fits") && queryType != KeyWords.SDSSFields && queryType != KeyWords.ConeSearchQuery && queryType != KeyWords.SIAP)
            {
                AddQueryTable(ResultsDataSet);// this adds to "ResultsDataSet" a new Table that shows the sql command.
            }

            string FileType = "";

            ExtraInfo.TryGetValue("FormatFromUser", out FileType);
            string SaveResult = "";

            ExtraInfo.TryGetValue("SaveResult", out SaveResult);

            switch (format)
            {
            case "csv":
            case "txt":
            case "text/plain":
                ResultsDataSet.RemotingFormat = SerializationFormat.Xml;
                WriteToStream    = (stream, foo, bar) => { OutputUtils.writeCSV(ResultsDataSet, stream); stream.Close(); };
                response.Content = new PushStreamContent(WriteToStream, new MediaTypeHeaderValue((KeyWords.contentCSV)));
                if (FileType == "csv")
                {
                    FileType = ".csv";
                }
                else
                {
                    FileType = ".txt";
                }
                if (SaveResult == "true")
                {
                    response.Content.Headers.Add("Content-Disposition", "attachment;filename=\"result" + FileType + "\"");
                }
                break;

            case "fits":
            case "application/fits":
                ResultsDataSet.RemotingFormat = SerializationFormat.Binary;
                WriteToStream    = (stream, foo, bar) => { OutputUtils.WriteFits(ResultsDataSet, stream); stream.Close(); };
                response.Content = new PushStreamContent(WriteToStream, new MediaTypeHeaderValue((KeyWords.contentFITS)));
                if (SaveResult == "true")
                {
                    response.Content.Headers.Add("Content-Disposition", "attachment;filename=\"result.fits\"");
                }
                break;

            case "votable":
            case "application/x-votable+xml":
                ResultsDataSet.RemotingFormat = SerializationFormat.Xml;
                WriteToStream    = (stream, foo, bar) => { OutputUtils.WriteVOTable(ResultsDataSet, stream); stream.Close(); };
                response.Content = new PushStreamContent(WriteToStream, new MediaTypeHeaderValue((KeyWords.contentVOTable)));
                if (SaveResult == "true")
                {
                    response.Content.Headers.Add("Content-Disposition", "attachment;filename=\"result.votable.xml\"");
                }
                break;

            case "xml":
            case "application/xml":
                ResultsDataSet.RemotingFormat = SerializationFormat.Xml;
                WriteToStream    = (stream, foo, bar) => { OutputUtils.WriteXml(ResultsDataSet, stream); stream.Close(); };
                response.Content = new PushStreamContent(WriteToStream, new MediaTypeHeaderValue((KeyWords.contentXML)));
                if (SaveResult == "true")
                {
                    response.Content.Headers.Add("Content-Disposition", "attachment;filename=\"result.xml\"");
                }
                break;

            case "json":
            case "application/json":
                ResultsDataSet.RemotingFormat = SerializationFormat.Xml;
                WriteToStream    = (stream, foo, bar) => { OutputUtils.WriteJson(ResultsDataSet, stream); stream.Close(); };
                response.Content = new PushStreamContent(WriteToStream, new MediaTypeHeaderValue((KeyWords.contentJson)));
                if (SaveResult == "true")
                {
                    response.Content.Headers.Add("Content-Disposition", "attachment;filename=\"result.json\"");
                }
                break;

            case "html":
            case "dataset":
            case "application/x-dataset":
                ProcessDataSet proc = new ProcessDataSet(query, format, TaskName, ExtraInfo, null, true, positionType, queryType, null, null);
                response.Content = proc.GetContent(ResultsDataSet);
                if (ExtraInfo.ContainsKey("FormatFromUser"))
                {
                    if (ExtraInfo["FormatFromUser"] == "html")
                    {
                        response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
                    }
                }
                //ResultsDataSet.RemotingFormat = SerializationFormat.Binary;
                //fmt = new BinaryFormatter();
                //WriteToStream = (stream, foo, bar) => { fmt.Serialize(stream, ResultsDataSet); stream.Close(); };
                //response.Content = new PushStreamContent(WriteToStream, new MediaTypeHeaderValue(KeyWords.contentDataset));
                break;

            default:
                ResultsDataSet.RemotingFormat = SerializationFormat.Binary;
                fmt              = new BinaryFormatter();
                WriteToStream    = (stream, foo, bar) => { fmt.Serialize(stream, ResultsDataSet); stream.Close(); };
                response.Content = new PushStreamContent(WriteToStream, new MediaTypeHeaderValue((KeyWords.contentDataset)));
                break;
            }
            //reader.Close();
            //response.Content = new StringContent(ClientIP);
            logger.LogActivity(ActivityInfo, "SkyserverMessage");
            return(response);
        }