From c35ed3707e353a4a798d1725bb52721276b3aacd Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Mon, 14 Sep 2020 15:51:10 +0000 Subject: [PATCH] =?UTF-8?q?Umbau=20Pasttrack=20Service=20in=20Restful=20We?= =?UTF-8?q?bservice=20(JSON)=20Achtung,=20hier=20musste=20ich=20serverseit?= =?UTF-8?q?ig=20noch=20.NET=20Activation=20(4.7)=20freischalten.=20Da=20ha?= =?UTF-8?q?be=20ich=20leider=20eine=20Weile=20suchen=20m=C3=BCssen..?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AIS/bsmd.pasttrack.service/IService.cs | 11 +++-- AIS/bsmd.pasttrack.service/Service.svc | 2 +- AIS/bsmd.pasttrack.service/Service.svc.cs | 53 +++++++++++++--------- AIS/bsmd.pasttrack.service/Web.config | 38 ++++++++++------ Stundensheet.xlsx | Bin 44866 -> 44986 bytes 5 files changed, 63 insertions(+), 41 deletions(-) diff --git a/AIS/bsmd.pasttrack.service/IService.cs b/AIS/bsmd.pasttrack.service/IService.cs index 29be855c..dff30ca4 100644 --- a/AIS/bsmd.pasttrack.service/IService.cs +++ b/AIS/bsmd.pasttrack.service/IService.cs @@ -1,4 +1,5 @@ using System; +using System.ServiceModel.Web; using System.Runtime.Serialization; using System.ServiceModel; @@ -8,11 +9,15 @@ namespace bsmd.pasttrack.service [ServiceContract] public interface IService { + [WebInvoke(Method = "GET", + BodyStyle = WebMessageBodyStyle.Wrapped, + RequestFormat = WebMessageFormat.Json, + ResponseFormat = WebMessageFormat.Json, + UriTemplate = "pasttrack/{mmsi}/{mins}")] [OperationContract] - Pasttrack[] GetPasttrack(int mmsi, int mins); + Pasttrack[] GetPasttrack(string mmsi, string mins); } - // Use a data contract as illustrated in the sample below to add composite types to service operations. [DataContract] public class Pasttrack @@ -23,8 +28,6 @@ And timestamp > DATEADD(MINUTE, -120, GETDATE()) order by timestamp desc */ - - [DataMember] public double Latitude { get; set; } [DataMember] diff --git a/AIS/bsmd.pasttrack.service/Service.svc b/AIS/bsmd.pasttrack.service/Service.svc index 50506dd3..bf3ae7ec 100644 --- a/AIS/bsmd.pasttrack.service/Service.svc +++ b/AIS/bsmd.pasttrack.service/Service.svc @@ -1 +1 @@ -<%@ ServiceHost Language="C#" Debug="true" Service="bsmd.pasttrack.service.Service" CodeBehind="Service.svc.cs" %> \ No newline at end of file +<%@ ServiceHost Service="bsmd.pasttrack.service.Service" Factory="System.ServiceModel.Activation.WebServiceHostFactory" Language="C#" debug="true" %> \ No newline at end of file diff --git a/AIS/bsmd.pasttrack.service/Service.svc.cs b/AIS/bsmd.pasttrack.service/Service.svc.cs index 40bf916b..108cf4b4 100644 --- a/AIS/bsmd.pasttrack.service/Service.svc.cs +++ b/AIS/bsmd.pasttrack.service/Service.svc.cs @@ -1,4 +1,5 @@ using System; + using System.Collections.Generic; using System.Data.SqlClient; using log4net; @@ -7,36 +8,44 @@ namespace bsmd.pasttrack.service { public class Service : IService { - private static ILog _log = LogManager.GetLogger(typeof(Service)); + private readonly static ILog _log = LogManager.GetLogger(typeof(Service)); - public Pasttrack[] GetPasttrack(int mmsi, int mins) + public Pasttrack[] GetPasttrack(string mmsi, string mins) { List aList = new List(); - // Query - try + if (Int32.TryParse(mmsi, out int mmsi_val) && Int32.TryParse(mins, out int mins_val)) { - SqlConnection con = new SqlConnection(Properties.Settings.Default.ConnectionString); - con.Open(); - string cmdText = string.Format("select Latitude, Longitude, Heading, Timestamp from aisposreport where mmsi=@MMSI And timestamp > DATEADD(MINUTE, @MIN, GETDATE()) order by timestamp desc"); - SqlCommand cmd = new SqlCommand(cmdText, con); - cmd.Parameters.AddWithValue("@MMSI", mmsi); - cmd.Parameters.AddWithValue("@MIN", -mins); - SqlDataReader reader = cmd.ExecuteReader(); - while(reader.Read()) + try { - Pasttrack p = new Pasttrack(); - p.Latitude = (double) reader.GetInt32(0) / 600000.0; - p.Longitude = (double) reader.GetInt32(1) / 600000.0; - p.Heading = reader.GetInt32(2); - p.Timestamp = reader.GetDateTime(3); - aList.Add(p); + SqlConnection con = new SqlConnection(Properties.Settings.Default.ConnectionString); + con.Open(); + string cmdText = string.Format("select Latitude, Longitude, Heading, Timestamp from aisposreport where mmsi=@MMSI And timestamp > DATEADD(MINUTE, @MIN, GETDATE()) order by timestamp desc"); + SqlCommand cmd = new SqlCommand(cmdText, con); + cmd.Parameters.AddWithValue("@MMSI", mmsi_val); + cmd.Parameters.AddWithValue("@MIN", -mins_val); + SqlDataReader reader = cmd.ExecuteReader(); + while (reader.Read()) + { + Pasttrack p = new Pasttrack + { + Latitude = (double)reader.GetInt32(0) / 600000.0, + Longitude = (double)reader.GetInt32(1) / 600000.0, + Heading = reader.GetInt32(2), + Timestamp = reader.GetDateTime(3) + }; + aList.Add(p); + } + reader.Close(); + con.Close(); } - reader.Close(); - con.Close(); - } catch (SqlException ex) + catch (SqlException ex) + { + _log.ErrorFormat("Error on data query: {0}", ex.ToString()); + } + } else { - _log.ErrorFormat("Error on data query: {0}", ex.ToString()); + _log.WarnFormat("invalid parameters: mins {0} mmsi {1}", mins, mmsi); } _log.InfoFormat("Result pasttrack array contains {0} elems", aList.Count); return aList.ToArray(); diff --git a/AIS/bsmd.pasttrack.service/Web.config b/AIS/bsmd.pasttrack.service/Web.config index 88f03507..2c4c0f89 100644 --- a/AIS/bsmd.pasttrack.service/Web.config +++ b/AIS/bsmd.pasttrack.service/Web.config @@ -20,22 +20,32 @@ - - - - - - - - + + + + + + + + + + + + + + - - - - - - + + + + + + + + + +