Example #1
0
        public void TestKeyFrame(ProcessDataPointValue dataPoint)
        {
            ProcessDataSet dataSet = new ProcessDataSet("test-publisher", "test001", 123, ProcessDataSet.DataSetType.TimeSeries);

            dataSet.AddDataPoint(dataPoint);
            DecodeMessage decoder = new DecodeMessage();

            byte[]         encodedMeta        = dataSet.GetEncodedMetaFrame(new EncodingOptions(), 1, true);
            byte[]         encodedKey         = dataSet.GetEncodedKeyFrame(2);
            NetworkMessage metaNetworkMessage = decoder.ParseBinaryMessage(encodedMeta);

            Assert.That(metaNetworkMessage, Is.Not.Null);
            Assert.That(metaNetworkMessage, Is.InstanceOf(typeof(MetaFrame)));
            Assert.That(metaNetworkMessage.NetworkMessageHeader.UADPFlags.HasFlag(UADPFlags.PayloadHeaderEnabled), Is.False);
            NetworkMessage keyNetworkMessage = decoder.ParseBinaryMessage(encodedKey);

            Assert.That(keyNetworkMessage, Is.Not.Null);
            Assert.That(keyNetworkMessage, Is.InstanceOf(typeof(KeyFrame)));
            Assert.That(keyNetworkMessage.NetworkMessageHeader.UADPFlags.HasFlag(UADPFlags.PayloadHeaderEnabled), Is.True);
            KeyFrame decodedKeyMessage             = (KeyFrame)keyNetworkMessage;
            ProcessDataPointValue decodedDataPoint = (ProcessDataPointValue)decodedKeyMessage.Items[0];

            Common.AssertDataPointsAreEqual(dataPoint, decodedDataPoint);
            Assert.That(decodedKeyMessage, Is.Not.Null);
            Assert.That(decodedKeyMessage.Items, Is.Not.Empty);
            Assert.That(decodedKeyMessage.Items.Count, Is.EqualTo(1));
            Assert.That(decodedKeyMessage.NetworkMessageHeader.UADPFlags.HasFlag(UADPFlags.PayloadHeaderEnabled), Is.True);
        }
Example #2
0
        public void KeyFrame(List <ProcessDataPointValue> dataPoints)
        {
            ProcessDataSet dataSet = new ProcessDataSet("test-publisher", "test001", 123, ProcessDataSet.DataSetType.TimeSeries);

            foreach (ProcessDataPointValue dataPoint in dataPoints)
            {
                dataSet.AddDataPoint(dataPoint);
            }
            DecodeMessage decoder = new DecodeMessage();

            byte[]         encodedMeta        = dataSet.GetEncodedMetaFrame(new EncodingOptions(), 1, true);
            byte[]         encodedKey         = dataSet.GetEncodedKeyFrame(2);
            NetworkMessage metaNetworkMessage = decoder.ParseBinaryMessage(encodedMeta);

            Assert.That(metaNetworkMessage, Is.Not.Null);
            Assert.That(metaNetworkMessage, Is.InstanceOf(typeof(MetaFrame)));
            NetworkMessage keyNetworkMessage = decoder.ParseBinaryMessage(encodedKey);

            Assert.That(keyNetworkMessage, Is.Not.Null);
            Assert.That(keyNetworkMessage, Is.InstanceOf(typeof(KeyFrame)));
            KeyFrame decodedKeyMessage = (KeyFrame)keyNetworkMessage;

            Assert.That(decodedKeyMessage, Is.Not.Null);
            Assert.That(decodedKeyMessage.Items, Is.Not.Empty);
            Assert.That(decodedKeyMessage.Items.Count, Is.EqualTo(dataPoints.Count));
            Assert.That(decodedKeyMessage.Items, Is.EqualTo(dataPoints));
        }
Example #3
0
        public void CreateErrorResponseMessageHTML(string ErrorMessage)
        {
            //Newtonsoft.Json.Linq.JArray array = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(ErrorMessage);//ResponseResult comes in json format
            Dictionary <string, string> values = JsonConvert.DeserializeObject <Dictionary <string, string> >(ErrorMessage);
            string error = values.ContainsKey("Error Message") ? values["Error Message"] : "UNKNOWN";

            try { values.Add("userid", logger.user_name); }
            catch { };
            try { values.Add("username", logger.user_name); }
            catch { };
            try { values.Add("pageurl", ActivityInfo.URI.ToString()); }
            catch { };
            try { values.Add("referrer", ActivityInfo.Referrer); }
            catch { };
            string TechnicalInfoAll = JsonConvert.SerializeObject(values);

            ProcessDataSet proc = new ProcessDataSet(query, format, TaskName, ExtraInfo, error, false, positionType, queryType, ErrorMessage, TechnicalInfoAll);

            response.Content = new StringContent(proc.getGenericCasJobsHTMLerror(error), tCode, KeyWords.contentHTML);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
        }
Example #4
0
        public void TestMetaFrame(ProcessDataPointValue dataPoint)
        {
            ProcessDataSet dataSet = new ProcessDataSet("test-publisher", "test001", 123, ProcessDataSet.DataSetType.TimeSeries);

            dataSet.AddDataPoint(dataPoint);

            byte[]         encodedMeta = dataSet.GetEncodedMetaFrame(new EncodingOptions(), 1, true);
            DecodeMessage  decoder     = new DecodeMessage();
            NetworkMessage decodedMeta = decoder.ParseBinaryMessage(encodedMeta);

            Assert.That(decodedMeta, Is.Not.Null);
            Assert.That(decodedMeta, Is.InstanceOf(typeof(MetaFrame)));
            Assert.That(decodedMeta.NetworkMessageHeader.ExtendedFlags2.MessageType, Is.EqualTo(Header.MessageType.DiscoveryResponse));
            Assert.That(decodedMeta.NetworkMessageHeader.ExtendedFlags2.Chunk, Is.False);
            Assert.That(decodedMeta.NetworkMessageHeader.UADPFlags.HasFlag(UADPFlags.PayloadHeaderEnabled), Is.False);

            decoder = new DecodeMessage();
            List <byte[]>  encodedMetaChunkedZero = dataSet.GetChunkedMetaFrame(0, new EncodingOptions(), 1);
            NetworkMessage decodedMetaChunkedZero = decoder.ParseBinaryMessage(encodedMetaChunkedZero[0]);

            Assert.That(decodedMetaChunkedZero, Is.Not.Null);
            Assert.That(decodedMetaChunkedZero, Is.InstanceOf(typeof(MetaFrame)));
            Assert.That(decodedMetaChunkedZero.NetworkMessageHeader.ExtendedFlags2.MessageType, Is.EqualTo(Header.MessageType.DiscoveryResponse));
            Assert.That(decodedMetaChunkedZero.NetworkMessageHeader.ExtendedFlags2.Chunk, Is.False);
            Assert.That(decodedMetaChunkedZero.NetworkMessageHeader.UADPFlags.HasFlag(UADPFlags.PayloadHeaderEnabled), Is.False);

            decoder = new DecodeMessage();
            List <byte[]>  encodedMetaChunked = dataSet.GetChunkedMetaFrame(1024 * 14, new EncodingOptions(), 1);
            NetworkMessage decodedMetaChunked = decoder.ParseBinaryMessage(encodedMetaChunked[0]);

            Assert.That(decodedMetaChunked, Is.Not.Null);
            Assert.That(decodedMetaChunked, Is.InstanceOf(typeof(MetaFrame)));
            Assert.That(decodedMetaChunked.NetworkMessageHeader.ExtendedFlags2.MessageType, Is.EqualTo(Header.MessageType.DiscoveryResponse));
            Assert.That(decodedMetaChunked.NetworkMessageHeader.ExtendedFlags2.Chunk, Is.True);
            Assert.That(decodedMetaChunked.NetworkMessageHeader.UADPFlags.HasFlag(UADPFlags.PayloadHeaderEnabled), Is.True);
        }
Example #5
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.
                }
            }
        }
Example #6
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);
        }
Example #7
0
        public HttpResponseMessage SendToMyDB()
        {
            HttpResponseMessage respMessage = null;
            string ResponseResult           = "";
            string requestUri = "";

            if (logger.IsValidUser)
            {
                string TableName = ExtraInfo["TableName"];

                if (!string.IsNullOrEmpty(TableName))
                {
                    Regex rg = new Regex("[^a-zA-Z0-9]");
                    if (rg.IsMatch(TableName))
                    {
                        throw (new Exception("String TableName may only contain letters or numbers."));
                    }

                    /*
                     * string ForbiddenChar = ",./-?\!";
                     * for (int i = 0; i < ForbiddenChar.Length;i++)
                     * {
                     *  if (TableName.Contains(ForbiddenChar.Substring(i,1)))
                     *      throw (new Exception("TableName may not contain characters like " + ForbiddenChar ));
                     * }
                     */
                    requestUri = ConfigurationManager.AppSettings["CASJobsREST"] + "contexts/MyDB/tables/";
                    HttpClient client = new HttpClient();
                    client.Timeout     = new TimeSpan(0, 0, 0, KeyWords.TimeoutCASJobs);// default is 100000ms
                    client.BaseAddress = new Uri(requestUri);
                    client.DefaultRequestHeaders.Add("X-Auth-Token", logger.Token);
                    respMessage    = client.GetAsync(requestUri).Result;
                    ResponseResult = respMessage.Content.ReadAsStringAsync().Result;
                    if (!respMessage.IsSuccessStatusCode)
                    {
                        if (ExtraInfo["DoReturnHtml"].ToLower() == "false")
                        {
                            CreateErrorResponseMessageJSON(ResponseResult);
                        }
                        else
                        {
                            CreateErrorResponseMessageHTML(ResponseResult);
                        }

                        logger.LogActivity(ActivityInfo, "SkyserverMessage");
                        return(response);
                    }

                    Dictionary <string, string> values;
                    Newtonsoft.Json.Linq.JArray array = (Newtonsoft.Json.Linq.JArray)JsonConvert.DeserializeObject(ResponseResult);//ResponseResult comes in json format
                    for (int i = 0; i < array.Count; i++)
                    {
                        values = JsonConvert.DeserializeObject <Dictionary <string, string> >(array[i].ToString());
                        if (values["Name"] == TableName)
                        {
                            if (ExtraInfo["DoReturnHtml"].ToLower() == "false")
                            {
                                throw (new Exception("Table \"" + TableName + "\" already exists in MyDB. Try changing the table name or see it in MyDB"));
                            }
                            else
                            {
                                ProcessDataSet proc         = new ProcessDataSet(query, format, TaskName, ExtraInfo, null, true, positionType, queryType, null, null);
                                string         queryResult1 = proc.getTableReSubmitHTMLresult(TableName, logger.Token);
                                response.Content = new StringContent(queryResult1, tCode, KeyWords.contentHTML);
                                response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
                            }
                            return(response);
                        }
                        //throw (new Exception("Table \"" + TableName + "\" already exists in MyDB. Try changing the table name or  <a target=INFO href=\"" + ConfigurationManager.AppSettings["CASJobs"] + "MyDB.aspx" + "\">LINK</a> "));
                    }
                }
                else// create a table name
                {
                    //DateTime2 now = DateTime2.Now;
                    TableName = "Table_" + DateTime.Now.ToString("yyyyMMdd_HHmmss_fff");
                }

/*
 *              if (!(ExtraInfo["EntryPoint"].ToLower().Contains("sqlsearch") || ExtraInfo["EntryPoint"].ToLower().Contains("crossid") || ExtraInfo["EntryPoint"].ToLower().Contains("proximity")))// sending query as a job
 *              {
 *                  string queryResult = "";
 *                  StringBuilder strbldr = new StringBuilder();
 *                  StringWriter sw = new StringWriter(strbldr);
 *                  using (JsonWriter writer = new JsonTextWriter(sw))
 *                  {
 *                      writer.WriteStartObject();
 *                      writer.WritePropertyName("query");
 *                      writer.WriteValue(ExtraInfo["QueryForUserDisplay"]);
 *                      writer.WritePropertyName("TaskName");
 *                      writer.WriteValue("SkyserverWS.SendToMyDB");
 *                      writer.WritePropertyName("CreateTable");
 *                      writer.WriteValue("true");
 *                      writer.WritePropertyName("TableName");
 *                      writer.WriteValue(TableName);
 *                  }
 *
 *                  StringContent content = new StringContent(strbldr.ToString());
 *                  content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
 *                  content.Headers.Add("X-Auth-Token", logger.Token);
 *
 *                  //posting the request and getting the result back.
 *                  HttpClient client2 = new HttpClient();
 *                  client2.Timeout = new TimeSpan(0, 0, 0, KeyWords.TimeoutCASJobs);// default is 100000ms
 *                  requestUri = ConfigurationManager.AppSettings["CASJobsREST"] + "contexts/" + KeyWords.DataRelease + "/jobs";
 *                  client2.BaseAddress = new Uri(requestUri);
 *                  respMessage = client2.PutAsync(requestUri, content).Result;
 *                  string JobID = "UNKNOWN";
 *                  if (respMessage.IsSuccessStatusCode)
 *                  {
 *                      JobID = respMessage.Content.ReadAsStringAsync().Result;
 *                      if (ExtraInfo["DoReturnHtml"].ToLower() == "false")
 *                      {
 *                          queryResult = "[{\"JobID\": \"" + JobID + "\", \"TableName\"= \"" + TableName + "\"}]";
 *                          response.Content = new StringContent(queryResult, tCode, KeyWords.contentJson);
 *                          response.Content.Headers.ContentType = new MediaTypeHeaderValue(KeyWords.contentJson);
 *                      }
 *                      else
 *                      {
 *                          ProcessDataSet proc = new ProcessDataSet(query, format, TaskName, ExtraInfo, null, true, positionType, queryType, null, null);
 *                          queryResult = proc.getCasJobsSubmitHTMLresult(JobID, TableName, logger.Token);
 *                          response.Content = new StringContent(queryResult, tCode, KeyWords.contentHTML);
 *                          response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
 *                      }
 *                  }
 *                  else
 *                  {
 *                      string ErrorMessage = respMessage.Content.ReadAsStringAsync().Result;
 *                      if (ExtraInfo["DoReturnHtml"].ToLower() == "false")
 *                          CreateErrorResponseMessageJSON(ErrorMessage);
 *                      else
 *                          CreateErrorResponseMessageHTML(ErrorMessage);
 *                  }
 *
 *                  logger.LogActivity(ActivityInfo, "SkyserverMessage");
 *                  return response;
 *
 *              }
 *              else // sending query results as a csv
 *              {
 *              }
 */

                //sending query result as a csv:
                string queryResult = "";
                RunQuery();
                Action <Stream, HttpContent, TransportContext> WriteToStream = null;
                DataSet ds = new DataSet();
                ds.Tables.Add(ResultsDataSet.Tables[0].Copy());
                WriteToStream = (stream, foo, bar) => { OutputUtils.writeCSV(ds, stream, false); stream.Close(); };
                HttpContent content = new PushStreamContent(WriteToStream, new MediaTypeHeaderValue((KeyWords.contentCSV)));
                //content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
                content.Headers.Add("X-Auth-Token", logger.Token);
                requestUri = ConfigurationManager.AppSettings["CASJobsREST"] + "contexts/MyDB/tables/" + TableName;
                HttpClient client2 = new HttpClient();
                client2.Timeout     = new TimeSpan(0, 0, 0, KeyWords.TimeoutCASJobs);// default is 100000ms
                client2.BaseAddress = new Uri(requestUri);
                respMessage         = client2.PostAsync(requestUri, content).Result;
                if (respMessage.IsSuccessStatusCode)
                {
                    if (ExtraInfo["DoReturnHtml"].ToLower() == "false")
                    {
                        queryResult      = "[{\"IsSuccessStatusCode\": \"true\", \"TableName\"= \"" + TableName + "\"}]";
                        response.Content = new StringContent(queryResult, tCode, KeyWords.contentJson);
                        response.Content.Headers.ContentType = new MediaTypeHeaderValue(KeyWords.contentJson);
                    }
                    else
                    {
                        ProcessDataSet proc = new ProcessDataSet(query, format, TaskName, ExtraInfo, null, true, positionType, queryType, null, null);
                        queryResult      = proc.getTableSubmitHTMLresult(TableName, logger.Token);
                        response.Content = new StringContent(queryResult, tCode, KeyWords.contentHTML);
                        response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
                    }
                }
                else
                {
                    string ErrorMessage = respMessage.Content.ReadAsStringAsync().Result;
                    if (ExtraInfo["DoReturnHtml"].ToLower() == "false")
                    {
                        CreateErrorResponseMessageJSON(ErrorMessage);
                    }
                    else
                    {
                        CreateErrorResponseMessageHTML(ErrorMessage);
                    }
                }

                logger.LogActivity(ActivityInfo, "SkyserverMessage");
                return(response);
            }
            else
            {
                throw (new UnauthorizedAccessException("You are not logged-in with SciServer. Please log-in and try again."));
            }
        }