Selaa lähdekoodia

2020/06/03 Jessica
Actions:
1.加入 Message Parse Failed 的訊息
2.處理 Request 如果發生Exception紀錄在LOG裡

Jessica.Tseng 4 vuotta sitten
vanhempi
commit
ac0b81bf9e

+ 1 - 1
EVCB_OCPP.WSServer/App.config

@@ -10,7 +10,7 @@
     <!--<add name="ConnectionLogDBContext" connectionString="data source=172.1.0.142\SQLEXPRESS;initial catalog=OCPP_ConnectionLogDBContext;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
     <add name="MainDBContext" connectionString="data source=172.1.0.142\SQLEXPRESS;initial catalog=OCPP_MainDBContext;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
     <add name="MeterValueDBContext" connectionString="data source=172.1.0.142\SQLEXPRESS;initial catalog=OCPP_MeterValueDBContext;;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />-->
-   <add name="ConnectionLogDBContext" connectionString="data source=172.1.2.187\SQLEXPRESS2017;initial catalog=StandardOCPP_ConnectionLog;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
+   <add name="ConnectionLogDBContext" connectionString="data source=172.1.2.187,1434\SQLEXPRESS2017;initial catalog=StandardOCPP_ConnectionLog;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
    <add name="MainDBContext" connectionString="data source=172.1.2.187\SQLEXPRESS2017;initial catalog=StandardOCPP_Main;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
    <add name="MeterValueDBContext" connectionString="data source=172.1.2.187\SQLEXPRESS2017;initial catalog=StandardOCPP_MeterValue;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />
    <add name="WebDBContext" connectionString="data source=172.1.2.187\SQLEXPRESS2017;initial catalog=StandardOCPP_Web;persist security info=True;user id=sa;password=Ph0930118811;MultipleActiveResultSets=True;App=EntityFramework; Max Pool Size=500" providerName="System.Data.SqlClient" />

BIN
EVCB_OCPP.WSServer/DLL/EVCB_OCPP.Domain.dll


+ 21 - 13
EVCB_OCPP.WSServer/Message/BasicMessageHandler.cs

@@ -66,6 +66,7 @@ namespace EVCB_OCPP.WSServer.Message
             MessageResult result = new MessageResult();
             try
             {
+
                 var msg = Parse(data);
                 if (msg != null)
                 {
@@ -90,6 +91,7 @@ namespace EVCB_OCPP.WSServer.Message
                                     }
                                     else
                                     {
+                                        Console.WriteLine("---------------* DataTransfer ***********");
                                         string replyMsg = GenerateCallError(msg.Id, OCPPErrorCodes.OccurenceConstraintViolation.ToString(),
                                              OCPPErrorDescription.OccurenceConstraintViolation);
                                         result.Id = TYPENUMBER_CALL;
@@ -102,6 +104,7 @@ namespace EVCB_OCPP.WSServer.Message
                                 }
                                 else
                                 {
+                                    Console.WriteLine("********** DataTransfer ***********");
                                     string replyMsg = GenerateCallError(msg.Id, OCPPErrorCodes.OccurenceConstraintViolation, OCPPErrorDescription.OccurenceConstraintViolation);
                                     result.Id = TYPENUMBER_CALL;
                                     result.Message = baseResult.Request;
@@ -159,7 +162,7 @@ namespace EVCB_OCPP.WSServer.Message
                                 {
                                     IRequest request = sentRequest as IRequest;
                                     result.Action = request.Action;
-                                  
+
                                     result.Message = sentRequest;
                                     result.ReceivedErrorCode = string.Format("ErrorMsg {0}:{1}", ((CallErrorMessage)msg).ErrorCode, ((CallErrorMessage)msg).ErrorDescription);
                                 }
@@ -178,6 +181,11 @@ namespace EVCB_OCPP.WSServer.Message
             }
             catch (Exception ex)
             {
+                if (string.IsNullOrEmpty(result.UUID))
+                {
+                    result.UUID = data.Substring(4, 39);
+                    result.UUID = result.UUID.Split(new string[] { "\"," }, StringSplitOptions.None)[0];
+                }
                 result.Success = false;
                 result.Exception = ex;
             }
@@ -194,9 +202,9 @@ namespace EVCB_OCPP.WSServer.Message
         {
             try
             {
-                if(message.StartsWith("[4,\""))
+                if (message.StartsWith("[4,\""))
                 {
-                    message= message.Replace('{', '"');
+                    message = message.Replace('{', '"');
                     message = message.Replace('}', '"');
                 }
                 var array = JsonConvert.DeserializeObject<JArray>(message);
@@ -237,7 +245,7 @@ namespace EVCB_OCPP.WSServer.Message
             }
             catch (Exception ex)
             {
-                throw new Exception(string.Format("Error=>Communicator.Parse: {0}", ex.ToString()));
+                throw new Exception(string.Format("Parse Error=> {0} Problem: {0}", message, ex.Message));
 
             }
 
@@ -265,14 +273,14 @@ namespace EVCB_OCPP.WSServer.Message
                     }
                 }
 
-                result.Request =  JsonConvert.DeserializeObject(payload, feature.GetRequestType()) as IRequest;
-               
+                result.Request = JsonConvert.DeserializeObject(payload, feature.GetRequestType()) as IRequest;
+
             }
             catch (Exception ex)
             {
                 result.Exception = ex;
                 logger.Error(string.Format("[{0}]UnPackPayloadbyCall Ex: {1}", action, ex.Message), "UnPack");
-               
+
             }
 
             return result;
@@ -282,7 +290,7 @@ namespace EVCB_OCPP.WSServer.Message
         {
             BasicMessageResult result = new BasicMessageResult();
             try
-            {              
+            {
                 IRequest request = requestQueue.RestoreRequest(uniqueId);
                 Feature feature = null;
                 foreach (var profile in profiles)
@@ -301,13 +309,13 @@ namespace EVCB_OCPP.WSServer.Message
                 IConfirmation confrim = JsonConvert.DeserializeObject(payload, feature.GetConfirmationType()) as IConfirmation;
                 confrim.SetRequest(request);
                 result.Confirmation = confrim;
-               
+
             }
             catch (Exception ex)
-            {                
+            {
                 result.Exception = ex;
                 logger.Error(string.Format("UnPackPayloadbyCallResult Data:[{0},{1}] Ex: {2}", uniqueId, payload, ex.ToString()), "UnPack");
-              
+
             }
             return result;
 
@@ -324,7 +332,7 @@ namespace EVCB_OCPP.WSServer.Message
 
         internal string GenerateCallError(string uniqueId, string errorCode, string errorDescription)
         {
-            
+
             string msg = string.Format(CALLERROR_FORMAT, uniqueId, errorCode, errorDescription, "{}");
             return msg;
 
@@ -336,7 +344,7 @@ namespace EVCB_OCPP.WSServer.Message
             if (confirmation != null && confirmation.Validate())
             {
 
-                msg = string.Format(CALLRESULT_FORMAT, uniqueId, JsonConvert.SerializeObject(confirmation, new JsonSerializerSettings() {  NullValueHandling= NullValueHandling.Ignore, Formatting = Formatting.None }));
+                msg = string.Format(CALLRESULT_FORMAT, uniqueId, JsonConvert.SerializeObject(confirmation, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.None }));
             }
             else
             {

+ 276 - 260
EVCB_OCPP.WSServer/Message/CoreProfileHandler.cs

@@ -18,190 +18,196 @@ using OCPPPackage.Profiles;
 using OCPPServer.Protocol;
 using System.Configuration;
 using System.Transactions;
+using System.Data.Entity.Core;
+using System.Data.Entity.Validation;
+using NLog;
 
 namespace EVCB_OCPP.WSServer.Message
 {
 
     internal partial class ProfileHandler
     {
+        static private ILogger logger = NLog.LogManager.GetCurrentClassLogger();
 
 
         async internal Task<MessageResult> ExecuteCoreRequest(Actions action, ClientData session, IRequest request)
         {
             MessageResult result = new MessageResult() { Success = false };
 
-            switch (action)
+            try
             {
+                switch (action)
+                {
 
-                case Actions.BootNotification:
-                    {
-                        BootNotificationRequest _request = request as BootNotificationRequest;
-                        int heartbeat_interval = GlobalConfig.GetHEARTBEAT_INTERVAL();
-                        using (var db = new MainDBContext())
+                    case Actions.BootNotification:
                         {
-                            var _machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
-                            _machine.ChargeBoxSerialNumber = string.IsNullOrEmpty(_request.chargeBoxSerialNumber) ? string.Empty : _request.chargeBoxSerialNumber;
-                            _machine.ChargePointModel = string.IsNullOrEmpty(_request.chargePointModel) ? string.Empty : _request.chargePointModel;
-                            _machine.ChargePointVendor = string.IsNullOrEmpty(_request.chargePointVendor) ? string.Empty : _request.chargePointVendor;
-                            _machine.FW_CurrentVersion = string.IsNullOrEmpty(_request.firmwareVersion) ? string.Empty : _request.firmwareVersion;
-                            _machine.Iccid = string.IsNullOrEmpty(_request.iccid) ? string.Empty : _request.iccid;
-                            _machine.Imsi = string.IsNullOrEmpty(_request.imsi) ? string.Empty : _request.imsi;
-                            _machine.MeterSerialNumber = string.IsNullOrEmpty(_request.meterSerialNumber) ? string.Empty : _request.meterSerialNumber;
-                            _machine.MeterType = string.IsNullOrEmpty(_request.meterType) ? string.Empty : _request.meterType;
+                            BootNotificationRequest _request = request as BootNotificationRequest;
+                            int heartbeat_interval = GlobalConfig.GetHEARTBEAT_INTERVAL();
+                            using (var db = new MainDBContext())
+                            {
+                                var _machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
+                                _machine.ChargeBoxSerialNumber = string.IsNullOrEmpty(_request.chargeBoxSerialNumber) ? string.Empty : _request.chargeBoxSerialNumber;
+                                _machine.ChargePointModel = string.IsNullOrEmpty(_request.chargePointModel) ? string.Empty : _request.chargePointModel;
+                                _machine.ChargePointVendor = string.IsNullOrEmpty(_request.chargePointVendor) ? string.Empty : _request.chargePointVendor;
+                                _machine.FW_CurrentVersion = string.IsNullOrEmpty(_request.firmwareVersion) ? string.Empty : _request.firmwareVersion;
+                                _machine.Iccid = string.IsNullOrEmpty(_request.iccid) ? string.Empty : _request.iccid;
+                                _machine.Imsi = string.IsNullOrEmpty(_request.imsi) ? string.Empty : _request.imsi;
+                                _machine.MeterSerialNumber = string.IsNullOrEmpty(_request.meterSerialNumber) ? string.Empty : _request.meterSerialNumber;
+                                _machine.MeterType = string.IsNullOrEmpty(_request.meterType) ? string.Empty : _request.meterType;
 
-                            db.SaveChanges();
+                                db.SaveChanges();
 
-                            var configVaule = db.MachineConfiguration.Where(x => x.ChargeBoxId == session.ChargeBoxId && x.ConfigureName == StandardConfiguration.HeartbeatInterval)
-                                .Select(x => x.ConfigureSetting).FirstOrDefault();
+                                var configVaule = db.MachineConfiguration.Where(x => x.ChargeBoxId == session.ChargeBoxId && x.ConfigureName == StandardConfiguration.HeartbeatInterval)
+                                    .Select(x => x.ConfigureSetting).FirstOrDefault();
 
-                            if (configVaule != null)
-                            {
-                                int.TryParse(configVaule, out heartbeat_interval);
+                                if (configVaule != null)
+                                {
+                                    int.TryParse(configVaule, out heartbeat_interval);
+                                }
                             }
-                        }
-                        var confirm = new BootNotificationConfirmation() { currentTime = DateTime.Now, interval = heartbeat_interval, status = Packet.Messages.SubTypes.RegistrationStatus.Accepted };
+                            var confirm = new BootNotificationConfirmation() { currentTime = DateTime.Now, interval = heartbeat_interval, status = Packet.Messages.SubTypes.RegistrationStatus.Accepted };
 
-                        result.Message = confirm;
-                        result.Success = true;
-                    }
-                    break;
-                case Actions.StatusNotification:
-                    {
-                        //只保留最新上報狀況
-                        StatusNotificationRequest _request = request as StatusNotificationRequest;
-                        int preStatus = 0;
-                        using (var db = new MainDBContext())
+                            result.Message = confirm;
+                            result.Success = true;
+                        }
+                        break;
+                    case Actions.StatusNotification:
                         {
-                            var _oldStatus = db.ConnectorStatus.Where(x => x.ChargeBoxId == session.ChargeBoxId
-                          && x.ConnectorId == _request.connectorId).AsNoTracking().FirstOrDefault();
+                            //只保留最新上報狀況
+                            StatusNotificationRequest _request = request as StatusNotificationRequest;
+                            int preStatus = 0;
+                            using (var db = new MainDBContext())
+                            {
+                                var _oldStatus = db.ConnectorStatus.Where(x => x.ChargeBoxId == session.ChargeBoxId
+                              && x.ConnectorId == _request.connectorId).AsNoTracking().FirstOrDefault();
 
 
-                            if (_oldStatus != null && (_request.status != (ChargePointStatus)_oldStatus.Status || _request.status == ChargePointStatus.Faulted))
-                            {
+                                if (_oldStatus != null && (_request.status != (ChargePointStatus)_oldStatus.Status || _request.status == ChargePointStatus.Faulted))
+                                {
 
-                                preStatus = _oldStatus.Status;
+                                    preStatus = _oldStatus.Status;
 
-                                db.Configuration.AutoDetectChangesEnabled = false;
-                                db.Configuration.ValidateOnSaveEnabled = false;
-                                db.ConnectorStatus.Attach(_oldStatus);
+                                    db.Configuration.AutoDetectChangesEnabled = false;
+                                    db.Configuration.ValidateOnSaveEnabled = false;
+                                    db.ConnectorStatus.Attach(_oldStatus);
 
 
-                                _oldStatus.CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now;
-                                _oldStatus.Status = (int)_request.status;
-                                _oldStatus.ChargePointErrorCodeId = (int)_request.errorCode;
-                                _oldStatus.ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info;
-                                _oldStatus.VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId;
-                                _oldStatus.VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode;
+                                    _oldStatus.CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now;
+                                    _oldStatus.Status = (int)_request.status;
+                                    _oldStatus.ChargePointErrorCodeId = (int)_request.errorCode;
+                                    _oldStatus.ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info;
+                                    _oldStatus.VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId;
+                                    _oldStatus.VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode;
 
 
-                                db.Entry(_oldStatus).Property(x => x.CreatedOn).IsModified = true;
-                                db.Entry(_oldStatus).Property(x => x.Status).IsModified = true;
-                                db.Entry(_oldStatus).Property(x => x.ChargePointErrorCodeId).IsModified = true;
-                                db.Entry(_oldStatus).Property(x => x.ErrorInfo).IsModified = true;
-                                db.Entry(_oldStatus).Property(x => x.VendorId).IsModified = true;
-                                db.Entry(_oldStatus).Property(x => x.VendorErrorCode).IsModified = true;
+                                    db.Entry(_oldStatus).Property(x => x.CreatedOn).IsModified = true;
+                                    db.Entry(_oldStatus).Property(x => x.Status).IsModified = true;
+                                    db.Entry(_oldStatus).Property(x => x.ChargePointErrorCodeId).IsModified = true;
+                                    db.Entry(_oldStatus).Property(x => x.ErrorInfo).IsModified = true;
+                                    db.Entry(_oldStatus).Property(x => x.VendorId).IsModified = true;
+                                    db.Entry(_oldStatus).Property(x => x.VendorErrorCode).IsModified = true;
 
 
-                            }
+                                }
 
-                            if (_oldStatus == null)
-                            {
-                                var _currentStatus = new Domain.Models.Database.ConnectorStatus()
+                                if (_oldStatus == null)
                                 {
-                                    ChargeBoxId = session.ChargeBoxId,
-                                    ConnectorId = (byte)_request.connectorId,
-                                    CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
-                                    Status = (int)_request.status,
-                                    ChargePointErrorCodeId = (int)_request.errorCode,
-                                    ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
-                                    VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId,
-                                    VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
-                                    Id = Guid.NewGuid().ToString()
-                                };
-                                db.ConnectorStatus.Add(_currentStatus);
+                                    var _currentStatus = new Domain.Models.Database.ConnectorStatus()
+                                    {
+                                        ChargeBoxId = session.ChargeBoxId,
+                                        ConnectorId = (byte)_request.connectorId,
+                                        CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
+                                        Status = (int)_request.status,
+                                        ChargePointErrorCodeId = (int)_request.errorCode,
+                                        ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
+                                        VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId,
+                                        VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
+                                        Id = Guid.NewGuid().ToString()
+                                    };
+                                    db.ConnectorStatus.Add(_currentStatus);
 
+                                }
+                                if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
+                                {
+                                    db.MachineError.Add(new MachineError()
+                                    {
+                                        ConnectorId = (byte)_request.connectorId,
+                                        CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
+                                        Status = (int)_request.status,
+                                        ChargeBoxId = session.ChargeBoxId,
+                                        ErrorCodeId = (int)_request.errorCode,
+                                        ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
+                                        PreStatus = _oldStatus == null ? -1 : preStatus,
+                                        VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
+                                        VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId
+                                    });
+                                }
+                                db.SaveChanges();
                             }
+
+
                             if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
                             {
-                                db.MachineError.Add(new MachineError()
+                                var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
+                                var notification = businessService.NotifyFaultStatus(new ErrorDetails()
                                 {
-                                    ConnectorId = (byte)_request.connectorId,
-                                    CreatedOn = _request.timestamp.HasValue ? _request.timestamp.Value : DateTime.Now,
-                                    Status = (int)_request.status,
                                     ChargeBoxId = session.ChargeBoxId,
-                                    ErrorCodeId = (int)_request.errorCode,
-                                    ErrorInfo = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
-                                    PreStatus = _oldStatus == null ? -1 : preStatus,
+                                    ConnectorId = _request.connectorId,
+                                    ErrorCode = _request.errorCode,
+                                    Info = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
+                                    OCcuredOn = _request.timestamp ?? DateTime.Now,
                                     VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
-                                    VendorId = string.IsNullOrEmpty(_request.vendorId) ? string.Empty : _request.vendorId
+
                                 });
                             }
-                            db.SaveChanges();
-                        }
 
-
-                        if (_request.status == Packet.Messages.SubTypes.ChargePointStatus.Faulted)
-                        {
-                            var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
-                            var notification = businessService.NotifyFaultStatus(new ErrorDetails()
-                            {
-                                ChargeBoxId = session.ChargeBoxId,
-                                ConnectorId = _request.connectorId,
-                                ErrorCode = _request.errorCode,
-                                Info = string.IsNullOrEmpty(_request.info) ? string.Empty : _request.info,
-                                OCcuredOn = _request.timestamp ?? DateTime.Now,
-                                VendorErrorCode = string.IsNullOrEmpty(_request.vendorErrorCode) ? string.Empty : _request.vendorErrorCode,
-
-                            });
+                            var confirm = new StatusNotificationConfirmation() { };
+                            result.Message = confirm;
+                            result.Success = true;
                         }
-
-                        var confirm = new StatusNotificationConfirmation() { };
-                        result.Message = confirm;
-                        result.Success = true;
-                    }
-                    break;
-                case Actions.Heartbeat:
-                    {
-                        using (var db = new MainDBContext())
+                        break;
+                    case Actions.Heartbeat:
                         {
-                            //  var machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
-                            var machine = new Machine() { Id = session.MachineId };
-                            if (machine != null)
+                            using (var db = new MainDBContext())
                             {
-                                db.Configuration.AutoDetectChangesEnabled = false;
-                                db.Configuration.ValidateOnSaveEnabled = false;
-                                db.Machine.Attach(machine);
-                                machine.HeartbeatUpdatedOn = DateTime.Now;
-                                machine.ConnectionType = session.UriScheme.Equals("wss") ? 2 : 1;
-                                db.Entry(machine).Property(x => x.HeartbeatUpdatedOn).IsModified = true;
-                                db.Entry(machine).Property(x => x.ConnectionType).IsModified = true;
-                                await db.SaveChangesAsync();
+                                //  var machine = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
+                                var machine = new Machine() { Id = session.MachineId };
+                                if (machine != null)
+                                {
+                                    db.Configuration.AutoDetectChangesEnabled = false;
+                                    db.Configuration.ValidateOnSaveEnabled = false;
+                                    db.Machine.Attach(machine);
+                                    machine.HeartbeatUpdatedOn = DateTime.Now;
+                                    machine.ConnectionType = session.UriScheme.Equals("wss") ? 2 : 1;
+                                    db.Entry(machine).Property(x => x.HeartbeatUpdatedOn).IsModified = true;
+                                    db.Entry(machine).Property(x => x.ConnectionType).IsModified = true;
+                                    await db.SaveChangesAsync();
+                                }
+                                var confirm = new HeartbeatConfirmation() { currentTime = DateTime.Now };
+                                result.Message = confirm;
+                                result.Success = true;
                             }
-                            var confirm = new HeartbeatConfirmation() { currentTime = DateTime.Now };
-                            result.Message = confirm;
-                            result.Success = true;
                         }
-                    }
-                    break;
-                case Actions.MeterValues:
-                    {
-                        MeterValuesRequest _request = request as MeterValuesRequest;
-
-                        if (_request.meterValue.Count > 0)
+                        break;
+                    case Actions.MeterValues:
                         {
-                            using (var db = new MeterValueDBContext())
+                            MeterValuesRequest _request = request as MeterValuesRequest;
+
+                            if (_request.meterValue.Count > 0)
                             {
-                                foreach (var item in _request.meterValue)
+                                using (var db = new MeterValueDBContext())
                                 {
-                                    foreach (var sampleVaule in item.sampledValue)
+                                    foreach (var item in _request.meterValue)
                                     {
+                                        foreach (var sampleVaule in item.sampledValue)
+                                        {
 
-                                        decimal value = Convert.ToDecimal(sampleVaule.value);
+                                            decimal value = Convert.ToDecimal(sampleVaule.value);
 
-                                        string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
-                     "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
+                                            string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
+                         "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
 
-                                        List<SqlParameter> parameter = new List<SqlParameter>
+                                            List<SqlParameter> parameter = new List<SqlParameter>
                                         {
                                               new SqlParameter("ChargeBoxId",session.ChargeBoxId),
                                               new SqlParameter("ConnectorId",  (byte)_request.connectorId),
@@ -217,162 +223,163 @@ namespace EVCB_OCPP.WSServer.Message
                                           };
 
 
-                                        db.Database.ExecuteSqlCommand(sp, parameter.ToArray());
+                                            db.Database.ExecuteSqlCommand(sp, parameter.ToArray());
 
 
 
 
-                                    }
+                                        }
 
+                                    }
                                 }
                             }
-                        }
 
-                        var confirm = new MeterValuesConfirmation() { };
-                        result.Message = confirm;
-                        result.Success = true;
-                    }
-                    break;
-                case Actions.StartTransaction:
-                    {
-                        StartTransactionRequest _request = request as StartTransactionRequest;
-                        IdTagInfo _idTagInfo = new IdTagInfo()
+                            var confirm = new MeterValuesConfirmation() { };
+                            result.Message = confirm;
+                            result.Success = true;
+                        }
+                        break;
+                    case Actions.StartTransaction:
                         {
-                            expiryDate = DateTime.UtcNow.AddDays(1),
-                            parentIdTag = "Supervisor",
-                            status = AuthorizationStatus.Accepted
+                           
+                            StartTransactionRequest _request = request as StartTransactionRequest;
+                            IdTagInfo _idTagInfo = new IdTagInfo()
+                            {
+                                expiryDate = DateTime.UtcNow.AddDays(1),
+                                parentIdTag = "Supervisor",
+                                status = AuthorizationStatus.Accepted
 
-                        };
+                            };
 
-                        int _transactionId = -1;
-                        if (DateTime.Compare(DateTime.UtcNow.AddSeconds(-10), _request.timestamp.ToUniversalTime()) >= 0)
-                        {
-                            var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
-                            _idTagInfo = await businessService.Authorize(session.ChargeBoxId, _request.idTag);
+                            int _transactionId = -1;
+                            if (DateTime.Compare(DateTime.UtcNow.AddSeconds(-10), _request.timestamp.ToUniversalTime()) >= 0)
+                            {
+                                var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
+                                _idTagInfo = await businessService.Authorize(session.ChargeBoxId, _request.idTag);
 
-                        }
+                            }
 
-                        using (var db = new MainDBContext())
-                        {
-                            var _CustomerId = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).Include(x => x.Customer).
-                                 Select(x => x.CustomerId).FirstOrDefault();
+                            using (var db = new MainDBContext())
+                            {
+                                var _CustomerId = db.Machine.Where(x => x.ChargeBoxId == session.ChargeBoxId).Include(x => x.Customer).
+                                     Select(x => x.CustomerId).FirstOrDefault();
 
-                            var _existedTx = db.TransactionRecord.Where(x => x.CustomerId == _CustomerId && x.ChargeBoxId == session.ChargeBoxId
-                               && x.ConnectorId == _request.connectorId && x.StartTime == _request.timestamp).Select(C => new { C.Id }).AsNoTracking().FirstOrDefault();
-                            TransactionRecord _newTransaction = new TransactionRecord();
+                                var _existedTx = db.TransactionRecord.Where(x => x.CustomerId == _CustomerId && x.ChargeBoxId == session.ChargeBoxId
+                                   && x.ConnectorId == _request.connectorId && x.StartTime == _request.timestamp).Select(C => new { C.Id }).AsNoTracking().FirstOrDefault();
+                                TransactionRecord _newTransaction = new TransactionRecord();
 
 
-                            if (_existedTx == null)
-                            {
-                                _newTransaction = new TransactionRecord()
+                                if (_existedTx == null)
                                 {
-                                    ChargeBoxId = session.ChargeBoxId,
-                                    ConnectorId = (byte)_request.connectorId,
-                                    CreatedOn = DateTime.Now,
-                                    StartIdTag = _request.idTag,
-                                    MeterStart = _request.meterStart,
-                                    CustomerId = _CustomerId,
-                                    StartTime = _request.timestamp,
-                                    ReservationId = _request.reservationId.HasValue ? _request.reservationId.Value : 0,
+                                    _newTransaction = new TransactionRecord()
+                                    {
+                                        ChargeBoxId = session.ChargeBoxId,
+                                        ConnectorId = (byte)_request.connectorId,
+                                        CreatedOn = DateTime.Now,
+                                        StartIdTag = _request.idTag,
+                                        MeterStart = _request.meterStart,
+                                        CustomerId = _CustomerId,
+                                        StartTime = _request.timestamp,
+                                        ReservationId = _request.reservationId.HasValue ? _request.reservationId.Value : 0,
 
 
-                                };
+                                    };
 
-                                db.TransactionRecord.Add(_newTransaction);
+                                    db.TransactionRecord.Add(_newTransaction);
 
-                                db.SaveChanges();
+                                    db.SaveChanges();
 
-                                _transactionId = _newTransaction.Id;
-                                Console.WriteLine("***************************************************** ");
-                                Console.WriteLine(string.Format("{0} :TransactionId {1} ", session.ChargeBoxId, _newTransaction.Id));
-                                Console.WriteLine("***************************************************** ");
+                                    _transactionId = _newTransaction.Id;
+                                    Console.WriteLine("***************************************************** ");
+                                    Console.WriteLine(string.Format("{0} :TransactionId {1} ", session.ChargeBoxId, _newTransaction.Id));
+                                    Console.WriteLine("***************************************************** ");
+                                }
+                                else
+                                {
+                                    _transactionId = _existedTx.Id;
+                                    Console.WriteLine("Duplication ***************************************************** " + _existedTx.Id);
+                                }
                             }
-                            else
+
+
+                            var confirm = new StartTransactionConfirmation()
                             {
-                                _transactionId = _existedTx.Id;
-                                Console.WriteLine("Duplication ***************************************************** " + _existedTx.Id);
-                            }
-                        }
+                                idTagInfo = _idTagInfo,
+                                transactionId = _transactionId
+                            };
 
 
-                        var confirm = new StartTransactionConfirmation()
+                            result.Message = confirm;
+                            result.Success = true;
+                        }
+                        break;
+                    case Actions.StopTransaction:
                         {
-                            idTagInfo = _idTagInfo,
-                            transactionId = _transactionId
-                        };
+                            StopTransactionRequest _request = request as StopTransactionRequest;
+                            List<TransactionDataRecord> _TransactionDatas = new List<TransactionDataRecord>();
+                            int _ConnectorId = 0;
 
+                            //  var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
+                            // var _idTagInfo = businessService.Authorize(session.ChargeBoxId, _request.idTag);
 
-                        result.Message = confirm;
-                        result.Success = true;
-                    }
-                    break;
-                case Actions.StopTransaction:
-                    {
-                        StopTransactionRequest _request = request as StopTransactionRequest;
-                        List<TransactionDataRecord> _TransactionDatas = new List<TransactionDataRecord>();
-                        int _ConnectorId = 0;
+                            var _idTagInfo = new IdTagInfo()
+                            {
+                                expiryDate = DateTime.UtcNow.AddDays(1),
+                                parentIdTag = "Supervisor",
+                                status = AuthorizationStatus.Accepted
 
-                        //  var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
-                        // var _idTagInfo = businessService.Authorize(session.ChargeBoxId, _request.idTag);
+                            };
 
-                        var _idTagInfo = new IdTagInfo()
-                        {
-                            expiryDate = DateTime.UtcNow.AddDays(1),
-                            parentIdTag = "Supervisor",
-                            status = AuthorizationStatus.Accepted
+                            using (var db = new MainDBContext())
+                            {
+                                var transaction = db.TransactionRecord.Where(x => x.Id == _request.transactionId
+                                 && x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
 
-                        };
+                                if (transaction != null)
+                                {
+                                    _ConnectorId = transaction.ConnectorId;
+                                    transaction.MeterStop = _request.meterStop;
+                                    transaction.StopTime = _request.timestamp;
+                                    transaction.StopReasonId = _request.reason.HasValue ? (int)_request.reason.Value : 0;
+                                    transaction.StopIdTag = _request.idTag;
 
-                        using (var db = new MainDBContext())
-                        {
-                            var transaction = db.TransactionRecord.Where(x => x.Id == _request.transactionId
-                             && x.ChargeBoxId == session.ChargeBoxId).FirstOrDefault();
+                                    if (_TransactionDatas.Count > 0)
+                                    {
+                                        _TransactionDatas.ForEach(x => x.ConnectorId = (byte)transaction.ConnectorId);
+                                    }
 
-                            if (transaction != null)
-                            {
-                                _ConnectorId = transaction.ConnectorId;
-                                transaction.MeterStop = _request.meterStop;
-                                transaction.StopTime = _request.timestamp;
-                                transaction.StopReasonId = _request.reason.HasValue ? (int)_request.reason.Value : 0;
-                                transaction.StopIdTag = _request.idTag;
+                                    await db.SaveChangesAsync();
+                                    var confirm = new StopTransactionConfirmation()
+                                    {
+                                        idTagInfo = _idTagInfo
 
-                                if (_TransactionDatas.Count > 0)
-                                {
-                                    _TransactionDatas.ForEach(x => x.ConnectorId = (byte)transaction.ConnectorId);
+                                    };
+                                    result.Message = confirm;
+                                    result.Success = true;
                                 }
-
-                                await db.SaveChangesAsync();
-                                var confirm = new StopTransactionConfirmation()
+                                else
                                 {
-                                    idTagInfo = _idTagInfo
-
-                                };
-                                result.Message = confirm;
-                                result.Success = true;
-                            }
-                            else
-                            {
-                                result.Exception = new Exception("Can't find transactionId " + _request.transactionId);
+                                    result.Exception = new Exception("Can't find transactionId " + _request.transactionId);
 
+                                }
                             }
-                        }
 
-                        if (_request.transactionData != null)
-                        {
-                            if (_request.transactionData.Count > 0)
+                            if (_request.transactionData != null)
                             {
-                                using (var _meterDb = new MeterValueDBContext())
+                                if (_request.transactionData.Count > 0)
                                 {
-                                    foreach (var item in _request.transactionData)
+                                    using (var _meterDb = new MeterValueDBContext())
                                     {
-                                        foreach (var sampleVaule in item.sampledValue)
+                                        foreach (var item in _request.transactionData)
                                         {
-                                            decimal value = Convert.ToDecimal(sampleVaule.value);
+                                            foreach (var sampleVaule in item.sampledValue)
+                                            {
+                                                decimal value = Convert.ToDecimal(sampleVaule.value);
 
-                                            string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
-                         "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
+                                                string sp = "[dbo].[uspInsertMeterValueRecord] @ChargeBoxId," +
+                             "@ConnectorId,@Value,@CreatedOn,@ContextId,@FormatId,@MeasurandId,@PhaseId,@LocationId,@UnitId,@TransactionId";
 
-                                            List<SqlParameter> parameter = new List<SqlParameter>
+                                                List<SqlParameter> parameter = new List<SqlParameter>
                                         {
                                               new SqlParameter("ChargeBoxId",session.ChargeBoxId),
                                               new SqlParameter("ConnectorId",  (byte)_ConnectorId),
@@ -388,36 +395,45 @@ namespace EVCB_OCPP.WSServer.Message
                                           };
 
 
-                                            _meterDb.Database.ExecuteSqlCommand(sp, parameter.ToArray());
+                                                _meterDb.Database.ExecuteSqlCommand(sp, parameter.ToArray());
+                                            }
                                         }
                                     }
-                                }
 
 
+                                }
                             }
-                        }
 
 
-                    }
-                    break;
-                case Actions.Authorize:
-                    {
-                        AuthorizeRequest _request = request as AuthorizeRequest;
-                        var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
-                        var confirm = new AuthorizeConfirmation()
+                        }
+                        break;
+                    case Actions.Authorize:
                         {
-                            idTagInfo = await businessService.Authorize(session.ChargeBoxId, _request.idTag)
-                        };
-                        result.Message = confirm;
-                        result.Success = true;
-                    }
-                    break;
-                default:
-                    {
-                        Console.WriteLine(string.Format("Not Implement {0} Logic", request.GetType().ToString().Replace("OCPPPackage.Messages.Core.", "")));
-                    }
-                    break;
+                            AuthorizeRequest _request = request as AuthorizeRequest;
+                            var businessService = BusinessServiceFactory.CreateBusinessService(session.CustomerId.ToString());
+                            var confirm = new AuthorizeConfirmation()
+                            {
+                                idTagInfo = await businessService.Authorize(session.ChargeBoxId, _request.idTag)
+                            };
+                            result.Message = confirm;
+                            result.Success = true;
+                        }
+                        break;
+                    default:
+                        {
+                            Console.WriteLine(string.Format("Not Implement {0} Logic", request.GetType().ToString().Replace("OCPPPackage.Messages.Core.", "")));
+                        }
+                        break;
+                }
             }
+            catch (Exception ex)
+            {               
+                logger.Fatal(string.Format("chargeBoxId:{0} {1}", session.ChargeBoxId, action));
+                logger.Fatal(string.Format("Data {0}", request.ToString()));
+                logger.Fatal(string.Format("Error {0}", ex.ToString()));
+                result.Exception = ex;
+            }
+
             return result;
         }
 

+ 11 - 2
EVCB_OCPP.WSServer/Message/FirmwareManagementProfileHandler.cs

@@ -19,8 +19,9 @@ namespace EVCB_OCPP.WSServer.Message
         internal MessageResult ExecuteFirmwareManagementRequest(Actions action, ClientData session, IRequest request)
         {
             MessageResult result = new MessageResult() { Success = false };
-
-            switch (action)
+            try
+            {
+                switch (action)
             {
 
                 case Actions.FirmwareStatusNotification:
@@ -127,6 +128,14 @@ namespace EVCB_OCPP.WSServer.Message
                     }
                     break;
             }
+            }
+            catch (Exception ex)
+            {
+                logger.Fatal(string.Format("chargeBoxId:{0} {1}", session.ChargeBoxId, action));
+                logger.Fatal(string.Format("Data {0}", request.ToString()));
+                logger.Fatal(string.Format("Error {0}", ex.ToString()));
+                result.Exception = ex;
+            }
             return result;
         }
 

+ 23 - 2
EVCB_OCPP.WSServer/Program.cs

@@ -1,4 +1,10 @@
-using System;
+using EVCB_OCPP.Packet.Features;
+using EVCB_OCPP.Packet.Messages.Basic;
+using EVCB_OCPP.Packet.Messages.Core;
+using EVCB_OCPP.WSServer.Message;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -10,7 +16,22 @@ namespace EVCB_OCPP.WSServer
     {
         static void Main(string[] args)
         {
-           
+            //[2,"2185519c-18ef-4455-a968-4a219126bbd0","DataTransfer",{"vendorId":"Phihong Technology","messageId":"ID_FirmwareVersion","data":"{ "CsuBootLoadFwRev": "01.01", "CsuKernelFwRev": "4.9.59-ga75d8e9305\n", "CsuRootFsFwRev": "B0.30.60.1770.B0", "CsuPrimFwRev": "D0.53.60.1770.B0" }"}]
+            var ff = new { CsuBootLoadFwRev = "01.01", CsuKernelFwRev = "4.9.59-ga75d8e9305\n", CsuRootFsFwRev = "B0.30.60.1770.B0", CsuPrimFwRev = "D0.53.60.1770.B0" };
+            BasicMessageHandler msgAnalyser = new BasicMessageHandler();
+            DataTransferRequest req = new DataTransferRequest
+            {
+                vendorId = "Phihong Technology",
+                messageId = "ID_FirmwareVersion",
+                data = JsonConvert.SerializeObject(ff)
+            
+            };
+            CallMessage message = new CallMessage();
+
+           // var ttttttttttttt =JsonConvert.SerializeObject(req);
+           var tttttttt= msgAnalyser.GenerateRequest(Guid.NewGuid().ToString(),Actions.DataTransfer.ToString(), req);
+            var array = JsonConvert.DeserializeObject<JArray>(tttttttt);
+
             ProtalServer s = new ProtalServer();
             Console.WriteLine("Starting Server...");
             s.Start();

+ 28 - 11
EVCB_OCPP.WSServer/ProtalServer.cs

@@ -411,7 +411,7 @@ namespace EVCB_OCPP.WSServer
                 MessageResult analysisResult = msgAnalyser.AnalysisReceiveData(session, rawdata);
 
                 WriteMachineLog(session, rawdata,
-                     string.Format("{0} {1}", string.IsNullOrEmpty(analysisResult.Action) ? "unknown" : analysisResult.Action, analysisResult.Id == 2 ? "Request" : (analysisResult.Id == 3 ? "Confirmation" : "Error")), string.IsNullOrEmpty(analysisResult.CallErrorMsg) ? "" : analysisResult.Exception.Message);
+                     string.Format("{0} {1}", string.IsNullOrEmpty(analysisResult.Action) ? "unknown" : analysisResult.Action, analysisResult.Id == 2 ? "Request" : (analysisResult.Id == 3 ? "Confirmation" : "Error")), analysisResult.Exception == null ? "" : analysisResult.Exception.Message);
 
 
 
@@ -425,15 +425,32 @@ namespace EVCB_OCPP.WSServer
                     }
                     else
                     {
-                        BaseMessage _baseMsg = analysisResult.Message as BaseMessage;
-                        string replyMsg = msgAnalyser.GenerateCallError(_baseMsg.Id, OCPPErrorCodes.InternalError, OCPPErrorDescription.InternalError);
-                        string errorMsg = string.Empty;
-                        if (analysisResult.Exception != null)
+                        if (analysisResult.Message == null)
                         {
-                            errorMsg = analysisResult.Exception.ToString();
+                            string replyMsg = msgAnalyser.GenerateCallError(analysisResult.UUID, OCPPErrorCodes.InternalError, OCPPErrorDescription.InternalError);
+                            string errorMsg = string.Empty;
+                            if (analysisResult.Exception != null)
+                            {
+                                errorMsg = analysisResult.Exception.ToString();
+                            }
+
+                            Send(session, replyMsg, string.Format("{0} {1}", "unknown", "Error"), "EVSE's sent essage has parsed Failed. ");
+                        }
+                        else
+                        {
+                            BaseMessage _baseMsg = analysisResult.Message as BaseMessage;
+
+
+                            string replyMsg = msgAnalyser.GenerateCallError(_baseMsg.Id, OCPPErrorCodes.InternalError, OCPPErrorDescription.InternalError);
+                            string errorMsg = string.Empty;
+                            if (analysisResult.Exception != null)
+                            {
+                                errorMsg = analysisResult.Exception.ToString();
+                            }
+
+                            Send(session, replyMsg, string.Format("{0} {1}", analysisResult.Action, "Error"), errorMsg);
                         }
 
-                        Send(session, replyMsg, string.Format("{0} {1}", analysisResult.Action, "Error"), errorMsg);
                     }
                 }
                 else
@@ -508,11 +525,11 @@ namespace EVCB_OCPP.WSServer
                         {
 
                             bool oldstatus = session.IsCheckIn;
-                            var replyResult = await profileHandler.ExecuteCoreRequest(action, session, (IRequest)analysisResult.Message);
+                            var replyResult = await profileHandler.ExecuteCoreRequest(action, session, (IRequest)analysisResult.Message).ConfigureAwait(false);
                             if (replyResult.Success)
                             {
                                 string response = msgAnalyser.GenerateConfirmation(analysisResult.UUID, (IConfirmation)replyResult.Message);
-                                Send(session, response, string.Format("{0} {1}", analysisResult.Action, "Confirmation"));
+                                Send(session, response, string.Format("{0} {1}", analysisResult.Action, "Confirmation"), replyResult.Exception == null ? string.Empty : replyResult.Exception.ToString());
                                 if (action == Actions.BootNotification && replyResult.Message is BootNotificationConfirmation)
                                 {
                                     if (((BootNotificationConfirmation)replyResult.Message).status == Packet.Messages.SubTypes.RegistrationStatus.Accepted)
@@ -623,7 +640,7 @@ namespace EVCB_OCPP.WSServer
                             if (replyResult.Success)
                             {
                                 string response = msgAnalyser.GenerateConfirmation(analysisResult.UUID, (IConfirmation)replyResult.Message);
-                                Send(session, response, string.Format("{0} {1}", analysisResult.Action, "Confirmation"));
+                                Send(session, response, string.Format("{0} {1}", analysisResult.Action, "Confirmation", replyResult.Exception == null ? string.Empty : replyResult.Exception.ToString()));
 
                             }
                             else
@@ -1224,7 +1241,7 @@ namespace EVCB_OCPP.WSServer
                     SqlParameter[] parameter =
                     {
                       new SqlParameter("CreatedOn",dd),
-                      new SqlParameter("ChargeBoxId",clientData.ChargeBoxId.Replace("'","''")),
+                      new SqlParameter("ChargeBoxId",clientData.ChargeBoxId==null?"unknown":clientData.ChargeBoxId.Replace("'","''")),
                       new SqlParameter("MessageType",messageType.Replace("'","''")),
                       new SqlParameter("Data",data.Replace("'","''")),
                       new SqlParameter("Msg",errorMsg.Replace("'","''")),

+ 1 - 1
TestTool.RemoteTriggerAPP/MainWindow.xaml

@@ -5,7 +5,7 @@
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:local="clr-namespace:TestTool.RemoteTriggerAPP"      
         mc:Ignorable="d"
-        Title="下發測試用工具(公司內網) V1.1.14 (20200528)" Height="481" Width="639">
+        Title="下發測試用工具(公司內網) V1.1.15 (20200529)" Height="481" Width="639">
     <Grid Margin="0,2,2,0">
         <Grid.ColumnDefinitions>
             <ColumnDefinition Width="109*"/>

+ 8 - 3
TestTool.RemoteTriggerAPP/MainWindow.xaml.cs

@@ -851,7 +851,7 @@ namespace TestTool.RemoteTriggerAPP
             UploadFile ufObj = new UploadFile();
             ufObj.CreatedOn = DateTime.Now.ToUniversalTime();
             ufObj.FileExtensionName = System.IO.Path.GetExtension(uxUploadFileTb.Text);
-            ufObj.Id = Guid.NewGuid();
+            ufObj.Id = Guid.NewGuid().ToString();
             ufObj.FileName = md5 + ufObj.FileExtensionName;
             ufObj.FilePath = "~/UploadFiles/Fw/" + ufObj.FileName;
             ufObj.FileSize = size;
@@ -860,6 +860,9 @@ namespace TestTool.RemoteTriggerAPP
             ufObj.OriginName = System.IO.Path.GetFileName(uxUploadFileTb.Text);
             ufObj.FileUrl = new Uri(Properties.Settings.Default.FilePreUrl + ufObj.FilePath.Replace("~/", "")).ToString();
             ufObj.IsOnline = true;
+            ufObj.VendorId = "TestTool";
+            ufObj.ModelName= "TestTool";
+            ufObj.ModuleId = 0;
 
             using (var db = new MainDBContext())
             {
@@ -947,7 +950,7 @@ namespace TestTool.RemoteTriggerAPP
             UploadFile ufObj = new UploadFile();
             ufObj.CreatedOn = DateTime.Now.ToUniversalTime();
             ufObj.FileExtensionName = System.IO.Path.GetExtension(uxUploadFileTb.Text);
-            ufObj.Id = Guid.NewGuid();
+            ufObj.Id = Guid.NewGuid().ToString();
             ufObj.FileName = md5 + ufObj.FileExtensionName;
             ufObj.FilePath = "~/UploadFiles/Fw/" + ufObj.FileName;
             ufObj.FileSize = size;
@@ -956,7 +959,9 @@ namespace TestTool.RemoteTriggerAPP
             ufObj.OriginName = System.IO.Path.GetFileName(uxUploadFileTb.Text);
             ufObj.FileUrl = new Uri(Properties.Settings.Default.FTPFilePreUrl + ufObj.FileName).ToString();
             ufObj.IsOnline = true;
-
+            ufObj.VendorId = "TestTool";
+            ufObj.ModelName = "TestTool";
+            ufObj.ModuleId = 0;
 
             using (var db = new MainDBContext())
             {