如何将对象引用正确设置为一个对象的距离?

时间:2019-05-08 04:34:23

标签: vb.net service

我目前正在运行Windows服务,该服务每天运行两次,在我对代码进行大量更改之前,它运行得很顺利。经过我所做的更改之后,我在服务日志中遇到了一个问题,该问题在第一天第二天就显示“对象引用未设置为对象的实例”顺利运行(不知道如何正确地说,但是希望你们能理解)

这个问题可能而且可能只是在我进行更改之后发生的。但是它只是添加了一个功能,如果我告诉服务这样做(通过更改app.config中的值),我会立即将其设置为false

这是我之前提到的问题所在,无论如何,所做的更改只是添加UpdateAllBookingJourneyDetails函数,如果我在{{1中将execute的值设置为True }}

app.config

和对象引用问题总是恰好在这一行,并且在启动服务后的第二天执行总是会遇到该问题。

Public Sub RunProcess(ByVal CancellationTime As DateTime, ByVal EmailTime As DateTime, ByVal endCancelation As DateTime, ByVal stopSend As DateTime)

        Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("DBConnectionGBS").ToString()
        Dim execute As Boolean = Convert.ChangeType(ConfigurationManager.AppSettings("execute").ToString(), TypeCode.Boolean)
        Dim daysforcancel As Integer = Convert.ToInt32(ConfigurationManager.AppSettings("daysforcancel").ToString())
        Dim daysforsync As Integer = Convert.ToInt32(ConfigurationManager.AppSettings("daysforcancel").ToString())
        Dim i As Integer = 0
        Dim msg As String = String.Empty
        Dim datecompare As Date = Today.AddDays(daysforcancel)
        Dim datecompareupdate As Date = Today.AddDays(daysforsync)
        Dim checkupdate As Boolean = False
        Dim timeNow As DateTime = DateTime.Parse(TimeString)
        Dim startCancelation As Boolean = timeNow > CancellationTime AndAlso timeNow < endCancelation
        Dim sendEmail As Boolean = timeNow > EmailTime AndAlso timeNow < stopSend

        Try
            Dim eWS As ProcessService.ProcessServiceSoap = New ProcessService.ProcessServiceSoapClient("ProcessServiceSoap1")

            Dim AllTransaction As List(Of BookingTransactionMain) = New List(Of BookingTransactionMain)()

            AllTransaction = gettransactiondetail.GetAllBK_TRANSMAINBookingExpiry("", "", "", "1,2", False, 2, 14, 1)

            If AllTransaction IsNot Nothing AndAlso AllTransaction.Count > 0 Then
                Dim UpdatedData As Integer = 0
                Dim Remindersend As Integer = 0
                Dim SynchData As Integer = 0
                Dim synced As Boolean = False
                For Each Trans As BookingTransactionMain In AllTransaction
                    Dim lessthan7day As Boolean = False
                    Dim emailnotification As String = ""
                    Dim SingleTransaction As List(Of ABS.Logic.GroupBooking.Booking.ListTransaction) = New List(Of ABS.Logic.GroupBooking.Booking.ListTransaction)()
                    SingleTransaction = gettransactiondetail.GetTransactionDetails(Trans.TransID)
                    Dim lstTrans As ABS.Logic.GroupBooking.Booking.ListTransaction = SingleTransaction(0)
                    Dim VoidPNRs As List(Of ABS.Logic.GroupBooking.Booking.BookingTransactionDetail) = New List(Of ABS.Logic.GroupBooking.Booking.BookingTransactionDetail)()
                    Dim ExpiredPNRs As List(Of ABS.Logic.GroupBooking.Booking.BookingTransactionDetail) = New List(Of ABS.Logic.GroupBooking.Booking.BookingTransactionDetail)()
                    lessthan7day = (Trans.STDDate.Date) <= (datecompare.Date)
                    checkupdate = (Trans.STDDate.Date) <= (datecompareupdate.Date)

                    If execute AndAlso startCancelation AndAlso checkupdate Then
                        synced = UpdateAllBookingJourneyDetails(lstTrans, lstTrans.AgentUserName.ToString(), lstTrans.AgentID.ToString(), VoidPNRs, ExpiredPNRs, True)

                        If synced = False Then
                            objSendEmail.SaveLog(EmailBase.SaveLogType.Synchronation, "Fail to Get Latest Update for Transaction : " & lstTrans.TransID & vbCrLf)
                        ElseIf synced = True Then
                            EventWriter.WriteEvent(EventWriter.EnumEventLogType.AuditLog, "UpdateLatesDetails")
                            objSendEmail.SaveLog(EmailBase.SaveLogType.Synchronation, " Synchronization for Transaction : " & vbCrLf &
                                    "PNR: " & Trans.RecordLocator & vbCrLf &
                                    "TransID: " & Trans.TransID & vbCrLf &
                                    "Journey: " & Trans.Journeys & vbCrLf &
                                    "Upload Status: " & Trans.PassengerStatus & vbCrLf &
                                    "Paid Status: " & Trans.PaidStatus & vbCrLf &
                                    "Balance Due: " & Trans.CollectedAmt & vbCrLf &
                                    "Departure Date: " & Trans.STDDate & vbCrLf &
                                    "Expiry Date: " & Trans.ExpiryDate & vbCrLf)
                            SynchData += 1
                        End If
                    End If

                    msg = gettransactiondetail.GetLatestReminderbyTransID(Trans.TransID)
                    If msg <> "" Then
                        emailnotification = True.ToString()
                    Else
                        emailnotification = False.ToString()
                    End If
                    objSendEmail.SaveLog(EmailBase.SaveLogType.Transaction, " All Transaction : " & vbCrLf &
                                "PNR: " & Trans.RecordLocator & vbCrLf &
                                "TransID: " & Trans.TransID & vbCrLf &
                                "Journey: " & Trans.Journeys & vbCrLf &
                                "Upload Status: " & Trans.PassengerStatus & vbCrLf &
                                "Paid Status: " & Trans.PaidStatus & vbCrLf &
                                "Email Notification: " & emailnotification & vbCrLf &
                                "Balance Due: " & Trans.CollectedAmt & vbCrLf &
                                "Departure Date: " & Trans.STDDate & vbCrLf &
                                "Expiry Date: " & Trans.ExpiryDate & vbCrLf)
                    If msg = "" AndAlso sendEmail Then
                        Try
                            Dim request As ProcessService.ResendReminderRequest = New ProcessService.ResendReminderRequest
                            Dim body As ProcessService.ResendReminderRequestBody = New ProcessService.ResendReminderRequestBody
                            body.transID = Trans.TransID
                            request.Body = body
                            eWS.ResendReminder(request)
                            EventWriter.WriteEvent(EventWriter.EnumEventLogType.AuditLog, "UpdateLatesDetails")
                            objSendEmail.SaveLog(EmailBase.SaveLogType.Reminder, " Email Notification for Transaction : " & vbCrLf &
                                            "PNR: " & Trans.RecordLocator & vbCrLf &
                                            "TransID: " & Trans.TransID & vbCrLf &
                                            "Journey: " & Trans.Journeys & vbCrLf &
                                            "Upload Status: " & Trans.PassengerStatus & vbCrLf &
                                            "Paid Status: " & Trans.PaidStatus & vbCrLf &
                                            "Balance Due: " & Trans.CollectedAmt & vbCrLf &
                                            "Departure Date: " & Trans.STDDate & vbCrLf &
                                            "Expiry Date: " & Trans.ExpiryDate & vbCrLf)
                            Remindersend += 1
                        Catch ex As Exception
                            EventWriter.WriteEvent(EventWriter.EnumEventLogType.ErrorLog, "Cancellation")
                            objSendEmail.SaveLog(EmailBase.SaveLogType.Reminder, "ResendReminder RunProcess-- " & ex.ToString() & vbCrLf &
                                                "Failed to send email" & vbCrLf)
                        End Try
                    ElseIf msg <> "" AndAlso startCancelation AndAlso Trans.BalanceDue <> 0 AndAlso lessthan7day AndAlso Trans.Journeys.ToLower.Contains("is available") AndAlso Trans.PassengerStatus.ToLower.Contains("pending") AndAlso Not Trans.PaidStatus.ToLower.Contains("paidinfull") Then
                        EventWriter.WriteEvent(EventWriter.EnumEventLogType.AuditLog, "UpdateLatesDetails")
                        objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation, " Cancellation Candidate for Transaction : " & vbCrLf &
                                "PNR: " & Trans.RecordLocator & vbCrLf &
                                "TransID: " & Trans.TransID & vbCrLf &
                                "Journey: " & Trans.Journeys & vbCrLf &
                                "Upload Status: " & Trans.PassengerStatus & vbCrLf &
                                "Paid Status: " & Trans.PaidStatus & vbCrLf &
                                "Email Notification: " & emailnotification & vbCrLf &
                                "Balance Due: " & Trans.CollectedAmt & vbCrLf &
                                "Departure Date: " & Trans.STDDate & vbCrLf &
                                "Expiry Date: " & Trans.ExpiryDate & vbCrLf)
                        Try
                            If execute Then
                                If CancelProcess(Trans.TransID) Then
                                    UpdatedData += 1
                                    EventWriter.WriteEvent(EventWriter.EnumEventLogType.AuditLog, "UpdateLatesDetails")
                                    objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation,
                                        "Cancellation Date: " & DateTime.Now.ToString() & vbCrLf &
                                        "Cancellation Success" & vbCrLf)
                                Else
                                    EventWriter.WriteEvent(EventWriter.EnumEventLogType.AuditLog, "UpdateLatesDetails")
                                    objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation, " Cancellation Failed" & vbCrLf)
                                End If
                            End If
                        Catch
                            EventWriter.WriteEvent(EventWriter.EnumEventLogType.AuditLog, "UpdateLatesDetails")
                            objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation, " Cancellation Failed" & vbCrLf)
                        Finally
                            msg = ""
                            lessthan7day = False
                        End Try
                        'EventWriter.WriteEvent(EventWriter.EnumEventLogType.AuditLog, "UpdateLatesDetails")
                        'objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation, " Payment/Upload passenger Reminder sending for Transaction : " & lstTrans.TransID)
                    End If
                Next
                If UpdatedData = 0 AndAlso startCancelation Then
                    EventWriter.WriteEvent(EventWriter.EnumEventLogType.ErrorLog, "Cancellation")
                    objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation, "Cancellation RunProcess-- " & vbCrLf & "No Cancelation Today" & vbCrLf)
                End If
                If Remindersend = 0 AndAlso sendEmail Then
                    EventWriter.WriteEvent(EventWriter.EnumEventLogType.ErrorLog, "Cancellation")
                    objSendEmail.SaveLog(EmailBase.SaveLogType.Reminder, "ResendReminder RunProcess-- " & vbCrLf & "No Email Sent Today" & vbCrLf)
                End If
                If SynchData = 0 AndAlso startCancelation Then
                    EventWriter.WriteEvent(EventWriter.EnumEventLogType.ErrorLog, "Cancellation")
                    objSendEmail.SaveLog(EmailBase.SaveLogType.Synchronation, "Synchronization RunProcess-- " & vbCrLf & "No Synchronization Today" & vbCrLf)
                End If
            Else
                EventWriter.WriteEvent(EventWriter.EnumEventLogType.ErrorLog, "Cancellation")
                objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation, "GetAllBK_TRANSMAINBookingExpiry RunProcess-- " & vbCrLf &
                                     "No Transaction is obtained from query" & vbCrLf)
            End If
            'for daily execution
        Catch ex As Exception
            EventWriter.WriteEvent(EventWriter.EnumEventLogType.ErrorLog, "Cancellation", ex)
            If startCancelation Then
                objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation, "Cancellation RunProcess-- " + ex.ToString + vbCrLf)
            ElseIf sendEmail Then
                objSendEmail.SaveLog(EmailBase.SaveLogType.Reminder, "ResendReminder RunProcess-- " + ex.ToString + vbCrLf)
            ElseIf checkupdate Then
                objSendEmail.SaveLog(EmailBase.SaveLogType.Synchronation, "Synchronization RunProcess-- " + ex.ToString + vbCrLf)
            End If
        Finally
            gettransactiondetail = Nothing
            ProcessDone = True
        End Try
    End Sub

这是GetAllBK_TRANSMAINBookingExpiry函数代码

AllTransaction = gettransactiondetail.GetAllBK_TRANSMAINBookingExpiry("", "", "", "1,2", False, 2, 14, 1)

如果有人遇到相同的问题,请提供任何建议,因为就像我之前说的那样,它可以平稳运行以每日执行,直到我添加Public Function GetAllBK_TRANSMAINBookingExpiry(ByVal AgentID As String, ByVal AgentName As String, ByVal RecordLocator As String, ByVal Status As String, ByVal Optional GetUptoDate As Boolean = False, ByVal Optional DayBeforeExpiry As Integer = 0, ByVal Optional IntervalDays As Integer = 0, ByVal Optional Sync As Integer = 0) As List(Of BookingTransactionMain) Try Dim ConnStr As String = System.Configuration.ConfigurationManager.AppSettings("DBConnectionGBS").ToString() Dim objSQL As SQLControl = New SQLControl objSQL.ClearFields() objSQL.ClearCondtions() Dim dt As DataTable = New DataTable() Dim dateValue As DateTime Dim numValue As Decimal Dim strSQL As String = String.Empty Dim strFilter As String = String.Empty Dim strOrder As String = String.Empty 'Dim ApiBook As ABS.Navitaire.APIBooking = New ABS.Navitaire.APIBooking("") Dim apibooking As APIBooking = New APIBooking() Dim psDomain As String = "" Dim psName As String = "" Dim psPwd As String = "" psDomain = ConfigurationManager.AppSettings("signature_domain").ToString() psName = ConfigurationManager.AppSettings("signature_username").ToString() psPwd = ConfigurationManager.AppSettings("signature_password").ToString() Dim objBookingTransactionMain As BookingTransactionMain = New BookingTransactionMain Dim objListBookingTransMain As List(Of BookingTransactionMain) = New List(Of BookingTransactionMain)() Dim SessionID As String = apibooking.AgentLogon("Public", psDomain, psName, psPwd) Dim response As ABS.Navitaire.BookingManager.GetBookingResponse = New ABS.Navitaire.BookingManager.GetBookingResponse() Using connection = New SqlConnection(ConnStr) connection.Open() If GetUptoDate = True Then strFilter = " AND tm.SyncLastUpd > DATEADD(MINUTE, -60, GETDATE()) " End If strFilter += String.Format(" AND ( BK_TRANSDTL.DepartureDate > CAST(GETDATE() AS DATE) AND BK_TRANSDTL.DepartureDate <= CAST(DATEADD(DAY, {0}, GETDATE()) AS DATE) ) ", IntervalDays + 1) strSQL = "SELECT BK_TRANSDTL.RecordLocator, BK_TRANSDTL.Origin as Origin," & " tm.ExpiryDate, " & " BK_TRANSDTL.DepartureDate as STDDate, tm.CollectedAmt, " & " ag.ContactFirstName + ' ' + ag.ContactLastName AS FullName, " & " CASE " & " WHEN tm.Transstatus = '0' THEN 'Pending' " & " WHEN tm.Transstatus = '1' THEN 'Pending' " & " WHEN tm.Transstatus = '2' AND tm.NeedPaymentStatus = '1' THEN 'Pending' " & " WHEN tm.Transstatus = '3' AND tm.NeedPaymentStatus = '1' THEN 'Pending' " & " WHEN tm.Transstatus = '2' AND tm.NeedPaymentStatus = '0' THEN 'Pending for Passenger Upload' " & " WHEN tm.Transstatus = '3' AND tm.NeedPaymentStatus = '0' THEN 'Confirmed' " & " WHEN tm.Transstatus IN('4','6','7') THEN 'Cancelled' " & " END AS 'Status', " & " tm.TransID, tm.AgentID, tm.TransTotalAmt, tm.SyncLastUpd, ag.Email, ag.Username, tm.BookingDate, tm.PaymentAmtEx3, " & " (SELECT TOP (1) SyncCreate " & " FROM AG_EMAIL WHERE(TransID = tm.TransID) AND(EmailType IN(3, 6))" & " AND(SyncCreate > DATEADD(DAY, -2, tm.curreminderdate)) ORDER BY SyncCreate DESC) AS PaymentDateEx3 " & " FROM BK_TRANSMAIN AS tm " & " INNER JOIN AG_PROFILE AS ag WITH(NOLOCK) ON tm.AgentID = ag.AgentID " & " INNER JOIN BK_TRANSDTL ON tm.TransID = BK_TRANSDTL.TransID " & " WHERE(tm.TransStatus IN('1', '2', '3') AND tm.NeedPaymentStatus = '1') " & strFilter & " AND tm.CollectedAmt > 0 AND LEN(BK_TRANSDTL.RecordLocator) >= 6 AND tm.IsOverride = 1 " & " GROUP BY BK_TRANSDTL.RecordLocator, tm.TransStatus, tm.NeedPaymentStatus, tm.CollectedAmt, " & " tm.ExpiryDate, BK_TRANSDTL.DepartureDate, tm.TransID, tm.AgentID, tm.TransTotalAmt, tm.SyncLastUpd, ag.Email, ag.Username, tm.BookingDate, " & " ag.ContactFirstName, ag.ContactLastName, tm.curreminderdate, tm.PaymentAmtEx3, tm.IsOverride, tm.STDDate, tm.PaymentAmtEx3, BK_TRANSDTL.DepartureDate, BK_TRANSDTL.Origin " & " ORDER BY tm.Transstatus, BK_TRANSDTL.DepartureDate, tm.ExpiryDate ,tm.STDDate " Dim cmd As SqlCommand = New SqlCommand(strSQL, connection) Dim da As SqlDataAdapter = New SqlDataAdapter(cmd) da.Fill(dt) connection.Close() If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then For Each drRow As DataRow In dt.Rows Dim BalanceDue As Decimal = 0 Dim PaidStatus As String = "" Dim PassengerStatus As String = "" Dim Journeys As String = "" Dim dtDtl As DataTable = New DataTable() Dim strSQLDtl As String = String.Format("SELECT DISTINCT RecordLocator FROM BK_TRANSDTL WHERE TransID = '{0}' ", CStr(drRow("TransID"))) connection.Open() cmd = New SqlCommand(strSQLDtl, connection) da = New SqlDataAdapter(cmd) da.Fill(dtDtl) connection.Close() If dtDtl IsNot Nothing AndAlso dtDtl.Rows.Count > 0 Then For Each drRowDtl As DataRow In dtDtl.Rows response = apibooking.getbookingresponse(CStr(drRowDtl("RecordLocator")), SessionID) If response.Booking IsNot Nothing Then BalanceDue += CDec(response.Booking.BookingSum.BalanceDue) PaidStatus = PaidStatus & response.Booking.RecordLocator & " is " & response.Booking.BookingInfo.PaidStatus.ToString() & " ; " If (response.Booking.Passengers.Where(Function(x) x.Names.Where(Function(y) y.FirstName.ToUpper().Contains("TBA")).Count() >= 0).Count() <= 0) Then PassengerStatus = PassengerStatus & response.Booking.RecordLocator & " is Already Upload ; " Else PassengerStatus = PassengerStatus & response.Booking.RecordLocator & " is Pending Upload ; " End If If (response.Booking.Journeys.Count() > 0) Then Journeys = Journeys & "Journeys for " & response.Booking.RecordLocator & " is Available ; " Else Journeys = Journeys & "Journeys for " & response.Booking.RecordLocator & " is Not Available ; " End If End If Next End If objBookingTransactionMain = New BookingTransactionMain() objBookingTransactionMain.TransID = CStr(drRow("TransID")) objBookingTransactionMain.AgentID = CStr(drRow("AgentID")) objBookingTransactionMain.Status = drRow("Status").ToString() objBookingTransactionMain.BookingDate = CType(drRow("BookingDate"), DateTime) If DateTime.TryParse(drRow("ExpiryDate").ToString(), dateValue) Then objBookingTransactionMain.ExpiryDate = CType(drRow("ExpiryDate"), DateTime) If DateTime.TryParse(drRow("STDDate").ToString(), dateValue) Then objBookingTransactionMain.STDDate = CType(drRow("STDDate"), DateTime) objBookingTransactionMain.AgentName = drRow("FullName").ToString() objBookingTransactionMain.DueAmt = CDec(drRow("TransTotalAmt")) - CDec(drRow("CollectedAmt")) objBookingTransactionMain.CollectedAmt = CDec(drRow("CollectedAmt")) objBookingTransactionMain.TransTotalAmt = CDec(drRow("TransTotalAmt")) If DateTime.TryParse(drRow("SyncLastUpd").ToString(), dateValue) Then objBookingTransactionMain.SyncLastUpd = CType(drRow("SyncLastUpd"), DateTime) If DateTime.TryParse(drRow("PaymentDateEx3").ToString(), dateValue) Then objBookingTransactionMain.PaymentDateEx3 = CType(drRow("PaymentDateEx3"), DateTime) If Decimal.TryParse(drRow("PaymentAmtEx3").ToString(), numValue) Then objBookingTransactionMain.PaymentAmtEx3 = CDec(drRow("PaymentAmtEx3")) objBookingTransactionMain.RecordLocator = drRow("RecordLocator").ToString() objBookingTransactionMain.PaidStatus = CStr(PaidStatus) objBookingTransactionMain.PassengerStatus = CStr(PassengerStatus) objBookingTransactionMain.BalanceDue = CDec(BalanceDue) objBookingTransactionMain.Journeys = CStr(Journeys) objBookingTransactionMain.Origin = CStr(drRow("Origin")) objListBookingTransMain.Add(objBookingTransactionMain) Next objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation, "GetAllBK_TRANSMAINBookingExpiry RunProcess-- Count" + objListBookingTransMain.Count.ToString + vbCrLf) Return objListBookingTransMain Else EventWriter.WriteEvent(EventWriter.EnumEventLogType.ErrorLog, "") objSendEmail.SaveLog("BK_TRANSMAIN does not exist." + vbCrLf) Return Nothing 'Throw New ApplicationException("BK_TRANSMAIN does not exist.") End If End Using Catch ex As Exception EventWriter.WriteEvent(EventWriter.EnumEventLogType.ErrorLog, "GetTransactionDetail", ex) objSendEmail.SaveLog(EmailBase.SaveLogType.Cancellation, "GetAllBK_TRANSMAINBookingExpiry RunProcess-- " + ex.ToString + vbCrLf) Return Nothing Finally objSQL.Dispose() End Try End Function 为止,也许

ps:对不起,我的英语不好,谢谢

0 个答案:

没有答案
相关问题