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 @@ - - - - - - - - + + + + + + + + + + + + + + - - - - - - + + + + + + + + + +