ASP.NET CreateTextFile 99,9% без ошибок - PullRequest
       13

ASP.NET CreateTextFile 99,9% без ошибок

0 голосов
/ 06 декабря 2018

У меня есть подпрограмма «BlahStat.aspx», запущенная на веб-сайте Azure, которая вызывается удаленной службой (не управляемой нами) и записывает файл, содержащий информацию о состоянии, в локальный каталог.

<%@ Page Language="VB" explicit="true" validateRequest="false" %>
<%@ Import namespace="ADODB" %>
<%@ Import namespace="WinHttp" %>
<%@ Import namespace="MSXML" %>
<%@ Import namespace="Scripting" %>

<script language="VB" runat="Server">

Function CreateRandomGUID(ByRef tmpLength As Integer) As String
    Randomize(Microsoft.VisualBasic.Timer())
    Dim tmpCounter As Integer
    Dim tmpGUID As String
    Const strValid As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    For tmpCounter = 1 To tmpLength
        tmpGUID = tmpGUID & Mid(strValid, Int(Rnd(1) * Len(strValid)) + 1, 1)
    Next 
    tmpGUID = tmpGUID & Right(New String(Chr(48), 5) & CStr(Int(Rnd(1) * 100000)), 5)
    CreateRandomGUID = tmpGUID
End Function

Dim MsgFilePath As String = "D:\home\site\mailroot\Drop"
Dim strstatus As String
Dim strid As String
Dim strMessageName As String
Dim dtCurrentDate As Date
Dim RecAddr As String
Dim SendAddr As String
Dim FileObject As Scripting.FileSystemObject
Dim OutputString As String
Dim MsgFile As Scripting.IFile
Dim strTempFile As String
Dim OutStream As Scripting.ITextStream
</script>

<%
strid = request.QueryString.Item("id")
strstatus = request.QueryString.Item("status")

If Len(strid) > 0 Then
    dtCurrentDate = Today
    strMessageName = "" & Hex(Year(dtCurrentDate)) & Hex(Month(dtCurrentDate)) & Hex(Microsoft.VisualBasic.Day(dtCurrentDate)) & CreateRandomGUID(13) & ""
    If Len(strstatus) > 1 Then
        SendAddr = "From: michael@bubble.com"
        RecAddr = "To: *STATUS." & strid & "@blah.co.nz"
        OutputString = SendAddr & Chr(13) & Chr(10) & RecAddr & Chr(13) & Chr(10) & Chr(13) & Chr(10) & strstatus & Chr(13) & Chr(10) & ""

        FileObject = New Scripting.FileSystemObject
        strTempFile = MsgFilePath & "\" & strMessageName & ".tmp"

        OutStream = FileObject.CreateTextFile(strTempFile, True, False)
        OutStream.WriteLine(OutputString)
        OutStream.Close
        OutStream = Nothing

        MsgFile = FileObject.GetFile(strTempFile)
        MsgFile.Name = "BLAH" & strMessageName & ".EML"
    End If
End If 
%>

Эта процедура прекрасно работала в 99,9% случаев в течение многих лет, однако время от времени она необъяснимым образом выдает ошибку 500, зафиксированную здесь из журнала http

POST /BlahStat.aspx |128|800a0046|Permission_denied 443 - Apache-HttpClient/4.5.1+(Java/1.8.0_161) - blah.site.net 500
POST /BlahStat.aspx |134|800a0035|File_not_found 443 - Apache-HttpClient/4.5.1+(Java/1.8.0_131) - blah.site.net 500
POST /BlahStat.aspx |134|800a003a|File_already_exists 443 - Apache-HttpClient/4.5.1+(Java/1.8.0_131) -blah.site.net 500

На самом деле, "File_already_exists" hasn 'с момента ввода строк переименования, которые были добавлены потому, что следующий сервис пытался заблокировать и обработать файл до того, как запись была завершена, не было замечено в течение нескольких месяцев.Взрыв!«Permission_denied» является / был наиболее частым, хотя теперь реализована пользовательская страница с ошибками, ни одна из этих ошибок больше не регистрируется, только переадресация.

Я понимаю, что могут быть разные причины, почему такаяПодпрограмма может разорвать запись файла в веб-приложении Azure (память, отключение и т. д.), поэтому мой вопрос:

Есть ли что-нибудь неправильно с этим кодом .aspx, который предотвращает его всегда работает правильно ..?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...