NSW Service für Wetris angelegt und getestet

This commit is contained in:
Daniel Schick 2021-03-15 16:47:28 +00:00
parent cf869eff57
commit 878bef3dc3
16 changed files with 185 additions and 70 deletions

Binary file not shown.

View File

@ -10,6 +10,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Runtime.Serialization;
namespace bsmd.database namespace bsmd.database
{ {
@ -17,6 +18,7 @@ namespace bsmd.database
/// <summary> /// <summary>
/// message class for ship agent, new in NSW 3.0 (March 2016) /// message class for ship agent, new in NSW 3.0 (March 2016)
/// </summary> /// </summary>
[DataContract]
public class AGNT : DatabaseEntity public class AGNT : DatabaseEntity
{ {
@ -37,30 +39,35 @@ namespace bsmd.database
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[Validation(ValidationCode.NOT_NULL)] [Validation(ValidationCode.NOT_NULL)]
[DataMember]
public string AgentCompanyName { get; set; } public string AgentCompanyName { get; set; }
[ShowReport] [ShowReport]
[LookupName("AGNT.AgentStreetAndNumber")] [LookupName("AGNT.AgentStreetAndNumber")]
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string AgentStreetAndNumber { get; set; } public string AgentStreetAndNumber { get; set; }
[ShowReport] [ShowReport]
[LookupName("AGNT.AgentPostalCode")] [LookupName("AGNT.AgentPostalCode")]
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string AgentPostalCode { get; set; } public string AgentPostalCode { get; set; }
[ShowReport] [ShowReport]
[LookupName("AGNT.AgentCity")] [LookupName("AGNT.AgentCity")]
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string AgentCity { get; set; } public string AgentCity { get; set; }
[ShowReport] [ShowReport]
[LookupName("AGNT.AgentCountry")] [LookupName("AGNT.AgentCountry")]
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string AgentCountry { get; set; } public string AgentCountry { get; set; }
[ShowReport] [ShowReport]
@ -69,12 +76,14 @@ namespace bsmd.database
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[Validation(ValidationCode.NOT_NULL)] [Validation(ValidationCode.NOT_NULL)]
[DataMember]
public string AgentLastName { get; set; } public string AgentLastName { get; set; }
[ShowReport] [ShowReport]
[LookupName("AGNT.AgentFirstName")] [LookupName("AGNT.AgentFirstName")]
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string AgentFirstName { get; set; } public string AgentFirstName { get; set; }
[ShowReport] [ShowReport]
@ -83,18 +92,21 @@ namespace bsmd.database
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[Validation(ValidationCode.NOT_NULL)] [Validation(ValidationCode.NOT_NULL)]
[DataMember]
public string AgentPhone { get; set; } public string AgentPhone { get; set; }
[ShowReport] [ShowReport]
[LookupName("AGNT.AgentFax")] [LookupName("AGNT.AgentFax")]
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string AgentFax { get; set; } public string AgentFax { get; set; }
[ShowReport] [ShowReport]
[LookupName("AGNT.AgentEMail")] [LookupName("AGNT.AgentEMail")]
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string AgentEMail { get; set; } public string AgentEMail { get; set; }
#endregion #endregion

View File

@ -13,12 +13,14 @@ using System.Data.SqlClient;
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.Serialization;
namespace bsmd.database namespace bsmd.database
{ {
[TypeConverter(typeof(MessageClassConverter<CallPurpose>))] [TypeConverter(typeof(MessageClassConverter<CallPurpose>))]
[JsonConverter(typeof(NoTypeConverterJsonConverter<CallPurpose>))] [JsonConverter(typeof(NoTypeConverterJsonConverter<CallPurpose>))]
[DataContract]
public class CallPurpose : DatabaseEntity, ISublistElement public class CallPurpose : DatabaseEntity, ISublistElement
{ {
@ -35,12 +37,14 @@ namespace bsmd.database
[ShowReport] [ShowReport]
[ENI2Validation] [ENI2Validation]
[DataMember]
public int CallPurposeCode { get; set; } public int CallPurposeCode { get; set; }
[ShowReport] [ShowReport]
[MaxLength(99)] [MaxLength(99)]
[ENI2Validation] [ENI2Validation]
[Validation(ValidationCode.STRING_MAXLEN, 99)] [Validation(ValidationCode.STRING_MAXLEN, 99)]
[DataMember]
public string CallPurposeDescription { get; set; } public string CallPurposeDescription { get; set; }
public string Identifier { get; set; } public string Identifier { get; set; }

View File

@ -19,6 +19,7 @@ using System.IO;
using Newtonsoft.Json; using Newtonsoft.Json;
using log4net; using log4net;
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.Serialization;
namespace bsmd.database namespace bsmd.database
{ {
@ -26,6 +27,7 @@ namespace bsmd.database
[XmlInclude(typeof(Message))] [XmlInclude(typeof(Message))]
[XmlInclude(typeof(MessageCore))] [XmlInclude(typeof(MessageCore))]
[XmlInclude(typeof(AGNT))] [XmlInclude(typeof(AGNT))]
[DataContract]
public abstract class DatabaseEntity : IDatabaseEntity, IMessageParagraph, IEquatable<DatabaseEntity>, ICloneable public abstract class DatabaseEntity : IDatabaseEntity, IMessageParagraph, IEquatable<DatabaseEntity>, ICloneable
{ {
protected Guid? id; protected Guid? id;

View File

@ -9,10 +9,12 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.SqlClient; using System.Data.SqlClient;
using System.Runtime.Serialization;
using log4net; using log4net;
namespace bsmd.database namespace bsmd.database
{ {
[DataContract]
public class INFO : DatabaseEntity public class INFO : DatabaseEntity
{ {
private static ILog _log = LogManager.GetLogger(typeof(INFO)); private static ILog _log = LogManager.GetLogger(typeof(INFO));
@ -26,6 +28,7 @@ namespace bsmd.database
[ShowReport] [ShowReport]
[Validation(ValidationCode.NOT_NULL)] [Validation(ValidationCode.NOT_NULL)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public byte? ShippingArea { get; set; } public byte? ShippingArea { get; set; }
[ShowReport] [ShowReport]
@ -33,23 +36,27 @@ namespace bsmd.database
[LookupName("INFO.RequestedPositionInPortOfCall")] [LookupName("INFO.RequestedPositionInPortOfCall")]
[MaxLength(100)] [MaxLength(100)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string RequestedPositionInPortOfCall { get; set; } public string RequestedPositionInPortOfCall { get; set; }
[ShowReport] [ShowReport]
[LookupName("INFO.SpecialRequirementsOfShipAtBerth")] [LookupName("INFO.SpecialRequirementsOfShipAtBerth")]
[MaxLength(255)] [MaxLength(255)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string SpecialRequirementsOfShipAtBerth { get; set; } public string SpecialRequirementsOfShipAtBerth { get; set; }
[ShowReport] [ShowReport]
[LookupName("INFO.ConstructionCharacteristicsOfShip")] [LookupName("INFO.ConstructionCharacteristicsOfShip")]
[MaxLength(100)] [MaxLength(100)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string ConstructionCharacteristicsOfShip { get; set; } public string ConstructionCharacteristicsOfShip { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.NOT_NULL)] [Validation(ValidationCode.NOT_NULL)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public byte? FumigatedBulkCargo { get; set; } public byte? FumigatedBulkCargo { get; set; }
/// <summary> /// <summary>
@ -74,6 +81,7 @@ namespace bsmd.database
[ShowReport] [ShowReport]
[LookupName("INFO.DeadWeightSummer_TNE")] [LookupName("INFO.DeadWeightSummer_TNE")]
[ENI2Validation] [ENI2Validation]
[DataMember]
public double? DeplacementSummerDraught_TNE { get; set; } public double? DeplacementSummerDraught_TNE { get; set; }
[ShowReport] [ShowReport]
@ -81,19 +89,23 @@ namespace bsmd.database
[Validation(ValidationCode.PORTAREA)] // ist bei NOK Transit leer [Validation(ValidationCode.PORTAREA)] // ist bei NOK Transit leer
[MaxLength(4)] [MaxLength(4)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string PortArea { get; set; } public string PortArea { get; set; }
[MaxLength(50)] [MaxLength(50)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string BowThrusterPower { get; set; } public string BowThrusterPower { get; set; }
[MaxLength(50)] [MaxLength(50)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string SternThrusterPower { get; set; } public string SternThrusterPower { get; set; }
[MaxLength(4)] [MaxLength(4)]
[LookupName("INFO.PortFacility")] [LookupName("INFO.PortFacility")]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string PortFacility { get; set; } public string PortFacility { get; set; }
#endregion #endregion

View File

@ -14,12 +14,14 @@ using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.ComponentModel; using System.ComponentModel;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Runtime.Serialization;
namespace bsmd.database namespace bsmd.database
{ {
[TypeConverter(typeof(MessageClassConverter<NOA_NOD>))] [TypeConverter(typeof(MessageClassConverter<NOA_NOD>))]
[JsonConverter(typeof(NoTypeConverterJsonConverter<NOA_NOD>))] [JsonConverter(typeof(NoTypeConverterJsonConverter<NOA_NOD>))]
[DataContract]
public class NOA_NOD : DatabaseEntity, ISublistContainer public class NOA_NOD : DatabaseEntity, ISublistContainer
{ {
public NOA_NOD() public NOA_NOD()
@ -32,11 +34,13 @@ namespace bsmd.database
[ShowReport] [ShowReport]
[Validation1(ValidationCode.NOT_NULL)] [Validation1(ValidationCode.NOT_NULL)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public DateTime? ETAToPortOfCall { get; set; } public DateTime? ETAToPortOfCall { get; set; }
[ShowReport] [ShowReport]
[Validation1(ValidationCode.NOT_NULL)] [Validation1(ValidationCode.NOT_NULL)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public DateTime? ETDFromPortOfCall { get; set; } public DateTime? ETDFromPortOfCall { get; set; }
[Validation1(ValidationCode.LIST_EMPTY)] [Validation1(ValidationCode.LIST_EMPTY)]
@ -45,31 +49,37 @@ namespace bsmd.database
[ShowReport] [ShowReport]
[Validation2(ValidationCode.NOT_NULL)] [Validation2(ValidationCode.NOT_NULL)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public DateTime? ETAToKielCanal { get; set; } public DateTime? ETAToKielCanal { get; set; }
[ShowReport] [ShowReport]
[Validation2(ValidationCode.NOT_NULL)] [Validation2(ValidationCode.NOT_NULL)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public DateTime? ETDFromKielCanal { get; set; } public DateTime? ETDFromKielCanal { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.NOT_NULL)] [Validation(ValidationCode.NOT_NULL)]
[MaxLength(5)] [MaxLength(5)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string LastPort { get; set; } public string LastPort { get; set; }
[ShowReport] [ShowReport]
[ENI2Validation] [ENI2Validation]
[DataMember]
public DateTime? ETDFromLastPort { get; set; } public DateTime? ETDFromLastPort { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.LOCODE_SSN)] [Validation(ValidationCode.LOCODE_SSN)]
[MaxLength(5)] [MaxLength(5)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string NextPort { get; set; } public string NextPort { get; set; }
[ShowReport] [ShowReport]
[ENI2Validation] [ENI2Validation]
[DataMember]
public DateTime? ETAToNextPort { get; set; } public DateTime? ETAToNextPort { get; set; }
[ENI2Validation] [ENI2Validation]

View File

@ -13,9 +13,12 @@ using System.Data.SqlClient;
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.Serialization;
namespace bsmd.database namespace bsmd.database
{ {
[DataContract]
public class STAT : DatabaseEntity public class STAT : DatabaseEntity
{ {
@ -31,48 +34,56 @@ namespace bsmd.database
[LookupName("STAT.ShipName")] [LookupName("STAT.ShipName")]
[MaxLength(100)] [MaxLength(100)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string ShipName { get; set; } public string ShipName { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.FRZ)] [Validation(ValidationCode.FRZ)]
[MaxLength(50)] [MaxLength(50)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string CallSign { get; set; } public string CallSign { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.MMSI)] [Validation(ValidationCode.MMSI)]
[MaxLength(50)] [MaxLength(50)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string MMSINumber { get; set; } public string MMSINumber { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.FLAG_CODE)] [Validation(ValidationCode.FLAG_CODE)]
[MaxLength(2)] [MaxLength(2)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string Flag { get; set; } public string Flag { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.DOUBLE_GT_ZERO)] [Validation(ValidationCode.DOUBLE_GT_ZERO)]
[LookupName("STAT.LengthOverall_MTR")] [LookupName("STAT.LengthOverall_MTR")]
[ENI2Validation] [ENI2Validation]
[DataMember]
public double? LengthOverall_MTR { get; set; } public double? LengthOverall_MTR { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.DOUBLE_GT_ZERO)] [Validation(ValidationCode.DOUBLE_GT_ZERO)]
[LookupName("STAT.Beam_MTR")] [LookupName("STAT.Beam_MTR")]
[ENI2Validation] [ENI2Validation]
[DataMember]
public double? Beam_MTR { get; set; } public double? Beam_MTR { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.DOUBLE_GT_ZERO)] [Validation(ValidationCode.DOUBLE_GT_ZERO)]
[LookupName("STAT.GrossTonnage")] [LookupName("STAT.GrossTonnage")]
[ENI2Validation] [ENI2Validation]
[DataMember]
public int? GrossTonnage { get; set; } public int? GrossTonnage { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.LOCODE_NOPORT)] [Validation(ValidationCode.LOCODE_NOPORT)]
[MaxLength(5)] [MaxLength(5)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string PortOfRegistry { get; set; } public string PortOfRegistry { get; set; }
[ShowReport] [ShowReport]
@ -80,6 +91,7 @@ namespace bsmd.database
[MaxLength(100)] [MaxLength(100)]
[ENI2Validation] [ENI2Validation]
[Validation(ValidationCode.INVALID_NUMBER_CHARS)] [Validation(ValidationCode.INVALID_NUMBER_CHARS)]
[DataMember]
public string InmarsatCallNumber { get; set; } public string InmarsatCallNumber { get; set; }
/// <summary> /// <summary>
@ -88,6 +100,7 @@ namespace bsmd.database
[Validation(ValidationCode.NOT_NULL)] [Validation(ValidationCode.NOT_NULL)]
[MaxLength(1)] [MaxLength(1)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string TransportMode { get; set; } public string TransportMode { get; set; }
[ShowReport] [ShowReport]
@ -110,42 +123,49 @@ namespace bsmd.database
[LookupName("STAT.ShipType")] [LookupName("STAT.ShipType")]
[MaxLength(5)] [MaxLength(5)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string ShipType { get; set; } public string ShipType { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.ISMCompanyName")] [LookupName("STAT.ISMCompanyName")]
[MaxLength(100)] [MaxLength(100)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string ISMCompanyName { get; set; } public string ISMCompanyName { get; set; }
[ShowReport] [ShowReport]
[Validation(ValidationCode.STRING_EXACT_LEN, 7)] [Validation(ValidationCode.STRING_EXACT_LEN, 7)]
[MaxLength(10)] [MaxLength(10)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string ISMCompanyId { get; set; } public string ISMCompanyId { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.ISMCompanyStreetAndNumber")] [LookupName("STAT.ISMCompanyStreetAndNumber")]
[MaxLength(100)] [MaxLength(100)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string ISMCompanyStreetAndNumber { get; set; } public string ISMCompanyStreetAndNumber { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.ISMCompanyPostalCode")] [LookupName("STAT.ISMCompanyPostalCode")]
[MaxLength(24)] [MaxLength(24)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string ISMCompanyPostalCode { get; set; } public string ISMCompanyPostalCode { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.ISMCompanyCity")] [LookupName("STAT.ISMCompanyCity")]
[MaxLength(100)] [MaxLength(100)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string ISMCompanyCity { get; set; } public string ISMCompanyCity { get; set; }
[ShowReport] [ShowReport]
[LookupName("STAT.ISMCompanyCountry")] [LookupName("STAT.ISMCompanyCountry")]
[MaxLength(100)] [MaxLength(100)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string ISMCompanyCountry { get; set; } public string ISMCompanyCountry { get; set; }
[Browsable(false)] [Browsable(false)]
@ -159,15 +179,18 @@ namespace bsmd.database
[LookupName("STAT.NetTonnage")] [LookupName("STAT.NetTonnage")]
[ENI2Validation] [ENI2Validation]
[DataMember]
public double? NetTonnage { get; set; } public double? NetTonnage { get; set; }
[LookupName("STAT.RegistryDate")] [LookupName("STAT.RegistryDate")]
[ENI2Validation] [ENI2Validation]
[DataMember]
public DateTime? RegistryDate { get; set; } public DateTime? RegistryDate { get; set; }
[LookupName("STAT.CertificateOfRegistryNumber")] [LookupName("STAT.CertificateOfRegistryNumber")]
[MaxLength(35)] [MaxLength(35)]
[ENI2Validation] [ENI2Validation]
[DataMember]
public string CertificateOfRegistryNumber { get; set; } public string CertificateOfRegistryNumber { get; set; }
[JsonIgnore] [JsonIgnore]

View File

@ -1,11 +1,8 @@
using System; using bsmd.database;
using System.Collections.Generic; using System;
using System.Linq;
using System.Runtime.Serialization; using System.Runtime.Serialization;
using System.ServiceModel; using System.ServiceModel;
using System.ServiceModel.Web; using System.ServiceModel.Web;
using System.Text;
using bsmd.database;
namespace bsmd.nsw.service namespace bsmd.nsw.service
{ {
@ -13,9 +10,14 @@ namespace bsmd.nsw.service
[ServiceContract] [ServiceContract]
public interface IService public interface IService
{ {
[
WebInvoke( //Method = "GET",
BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
// ,UriTemplate = "pasttrack/{mmsi}/{mins}")]
[OperationContract] [OperationContract]
NSWEntry[] GetData(string poc, DateTime? from , DateTime? to); NSWEntry[] NSWData(string poc, string from , string to);
} }

View File

@ -1,36 +1,7 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("bsmd.nsw.service")] [assembly: AssemblyTitle("bsmd.nsw.service")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("WCF Service to expose some nsw message classes to Wetris")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("bsmd.nsw.service")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("ac61d284-d3c1-4139-86a1-83459dc1c4e0")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -25,7 +25,8 @@ namespace bsmd.nsw.service.Properties {
[global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")] [global::System.Configuration.DefaultSettingValueAttribute("Initial Catalog=nsw;Data Source=192.168.2.24\\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;P" +
"ersist Security Info=False;Connection Reset=false")]
public string ConnectionString { public string ConnectionString {
get { get {
return ((string)(this["ConnectionString"])); return ((string)(this["ConnectionString"]));

View File

@ -3,7 +3,7 @@
<Profiles /> <Profiles />
<Settings> <Settings>
<Setting Name="ConnectionString" Type="System.String" Scope="Application"> <Setting Name="ConnectionString" Type="System.String" Scope="Application">
<Value Profile="(Default)" /> <Value Profile="(Default)">Initial Catalog=nsw;Data Source=192.168.2.24\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;Persist Security Info=False;Connection Reset=false</Value>
</Setting> </Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@ -1 +1 @@
<%@ ServiceHost Language="C#" Debug="true" Service="bsmd.nsw.service.Service1" CodeBehind="Service.svc.cs" %> <%@ ServiceHost Language="C#" Debug="true" Service="bsmd.nsw.service.Service" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

View File

@ -5,21 +5,29 @@ using System.Collections.Generic;
namespace bsmd.nsw.service namespace bsmd.nsw.service
{ {
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
// NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
public class Service : IService public class Service : IService
{ {
private readonly ILog _log = LogManager.GetLogger(typeof(Service)); private readonly ILog _log = LogManager.GetLogger(typeof(Service));
public NSWEntry[] GetData(string poc, DateTime? fromDate, DateTime? toDate) public NSWEntry[] NSWData(string poc, string fromDateString, string toDateString)
{ {
List<NSWEntry> entries = new List<NSWEntry>(); List<NSWEntry> entries = new List<NSWEntry>();
DateTime? fromDate = null;
if (DateTime.TryParse(fromDateString, out DateTime fromDateParsed))
fromDate = fromDateParsed;
DateTime? toDate = null;
if (DateTime.TryParse(toDateString, out DateTime toDateParsed))
toDate = toDateParsed;
_log.InfoFormat("Received request for {0} between {1} and {2}", poc, fromDate.HasValue ? fromDate.Value.ToString() : "?", toDate.HasValue ? toDate.Value.ToString() : "?");
if (DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString)) if (DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString))
{ {
// add search criteria // add search criteria
if (!poc.IsNullOrEmpty()) if (!poc.IsNullOrEmpty())
{ {
Dictionary<MessageCore.SearchFilterType, string> filterDict = new Dictionary<MessageCore.SearchFilterType, string>(); Dictionary<MessageCore.SearchFilterType, string> filterDict = new Dictionary<MessageCore.SearchFilterType, string>();
filterDict.Add(MessageCore.SearchFilterType.FILTER_PORT, poc); filterDict.Add(MessageCore.SearchFilterType.FILTER_PORT, poc);
uint? from = null, to = null; uint? from = null, to = null;
@ -35,13 +43,13 @@ namespace bsmd.nsw.service
filterDict.Add(MessageCore.SearchFilterType.FILTER_ETA, string.Format("{0}:{1}", from?.ToString() ?? "", to?.ToString() ?? "")); filterDict.Add(MessageCore.SearchFilterType.FILTER_ETA, string.Format("{0}:{1}", from?.ToString() ?? "", to?.ToString() ?? ""));
int? resultLimit; int? resultLimit;
int? expectedResultNum = DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetNumCoresWithFilters(filterDict); int? expectedResultNum = DBManager.Instance.GetNumCoresWithFilters(filterDict);
if ((expectedResultNum ?? 0) > 100) if ((expectedResultNum ?? 0) > 100)
resultLimit = 100; resultLimit = 100;
else else
resultLimit = expectedResultNum; resultLimit = expectedResultNum;
foreach(MessageCore core in DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessageCoresWithFilters(filterDict, resultLimit)) foreach(MessageCore core in DBManager.Instance.GetMessageCoresWithFilters(filterDict, resultLimit))
{ {
NSWEntry entry = new NSWEntry(); NSWEntry entry = new NSWEntry();
if(core.ETA.HasValue) if(core.ETA.HasValue)
@ -49,17 +57,21 @@ namespace bsmd.nsw.service
entry.IMO_ENI = core.IMOENIDisplay; entry.IMO_ENI = core.IMOENIDisplay;
entry.PoC = core.PoC; entry.PoC = core.PoC;
foreach(Message message in DBManager.GetSingleCon(Properties.Settings.Default.ConnectionString).GetMessagesForCore(core, DBManager.MessageLoad.EXCEL)) Message agntMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.AGNT);
{ if ((agntMessage != null) && (agntMessage.Elements.Count > 0))
if ((message.MessageNotificationClass == Message.NotificationClass.AGNT) && (message.Elements.Count > 0)) entry.AGNT = agntMessage.Elements[0] as AGNT;
entry.AGNT = message.Elements[0] as AGNT;
if ((message.MessageNotificationClass == Message.NotificationClass.NOA_NOD) && (message.Elements.Count > 0)) Message noanodMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.NOA_NOD);
entry.NOA_NOD = message.Elements[0] as NOA_NOD; if ((noanodMessage != null) && (noanodMessage.Elements.Count > 0))
if ((message.MessageNotificationClass == Message.NotificationClass.STAT) && (message.Elements.Count > 0)) entry.NOA_NOD = noanodMessage.Elements[0] as NOA_NOD;
entry.STAT = message.Elements[0] as STAT;
if ((message.MessageNotificationClass == Message.NotificationClass.INFO) && (message.Elements.Count > 0)) Message statMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.STAT);
entry.INFO = message.Elements[0] as INFO; if ((statMessage != null) && (statMessage.Elements.Count > 0))
} entry.STAT = statMessage.Elements[0] as STAT;
Message infoMessage = DBManager.Instance.GetMessage(core, Message.NotificationClass.INFO);
if ((infoMessage != null) && (infoMessage.Elements.Count > 0))
entry.INFO = infoMessage.Elements[0] as INFO;
entries.Add(entry); entries.Add(entry);
} }

View File

@ -1,4 +1,4 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<configuration> <configuration>
<configSections> <configSections>
@ -11,19 +11,30 @@
</appSettings> </appSettings>
<system.web> <system.web>
<compilation debug="true" targetFramework="4.5.2"/> <compilation debug="true" targetFramework="4.5.2"/>
<httpRuntime targetFramework="4.5.2"/> <httpRuntime targetFramework="4.5.2" executionTimeout="600"/>
</system.web> </system.web>
<system.serviceModel> <system.serviceModel>
<behaviors> <behaviors>
<serviceBehaviors> <serviceBehaviors>
<behavior> <behavior name="ServiceBehavior">
<!-- To avoid disclosing metadata information, set the values below to false before deployment --> <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/> <serviceDebug includeExceptionDetailInFaults="false"/>
</behavior> </behavior>
</serviceBehaviors> </serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors> </behaviors>
<services>
<service name="bsmd.nsw.service.Service" behaviorConfiguration="ServiceBehavior">
<endpoint binding="webHttpBinding" contract="bsmd.nsw.service.IService" behaviorConfiguration="web">
</endpoint>
</service>
</services>
<protocolMapping> <protocolMapping>
<add binding="basicHttpsBinding" scheme="https"/> <add binding="basicHttpsBinding" scheme="https"/>
</protocolMapping> </protocolMapping>
@ -38,11 +49,34 @@
<directoryBrowse enabled="true"/> <directoryBrowse enabled="true"/>
</system.webServer> </system.webServer>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="sdt"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="e:\temp\client.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<applicationSettings> <applicationSettings>
<bsmd.nsw.service.Properties.Settings> <bsmd.nsw.service.Properties.Settings>
<setting name="ConnectionString" serializeAs="String"> <setting name="ConnectionString" serializeAs="String">
<value /> <value>Initial Catalog=nsw;Data Source=192.168.2.24\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;Persist Security Info=False;Connection Reset=false</value>
</setting> </setting>
</bsmd.nsw.service.Properties.Settings> </bsmd.nsw.service.Properties.Settings>
</applicationSettings> </applicationSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669E0DDF0BB1AA2A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.0.12.0" newVersion="2.0.12.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration> </configuration>

View File

@ -68,6 +68,15 @@
<Content Include="Web.config" /> <Content Include="Web.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="..\bsmd.database\Properties\AssemblyProductInfo.cs">
<Link>Properties\AssemblyProductInfo.cs</Link>
</Compile>
<Compile Include="..\bsmd.database\Properties\AssemblyProjectInfo.cs">
<Link>Properties\AssemblyProjectInfo.cs</Link>
</Compile>
<Compile Include="..\bsmd.database\Properties\AssemblyProjectKeyInfo.cs">
<Link>Properties\AssemblyProjectKeyInfo.cs</Link>
</Compile>
<Compile Include="Properties\Settings.Designer.cs"> <Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
@ -83,6 +92,7 @@
<Folder Include="App_Data\" /> <Folder Include="App_Data\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="log4net.config" />
<None Include="packages.config" /> <None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>

View File

@ -0,0 +1,22 @@
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="E:\Temp\nsw_service.log" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>