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. } } }
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); }