- RedDot CMS Blog
- 15.11.2019
- IT
rdb: Debug di Pre-Esecuzione (classico) ASP
Problema
sono sicuro che praticamente ogni RedDot CMS, Soluzioni Web di Gestione del Server developer sarebbe venuto contro alcuni pre-eseguito ASP nei loro modelli, che non è riuscito. La conseguente frustrazione di non avere un metodo integrato di debug o anche solo di ottenere una sorta di messaggio di errore significativo dal CMS WSMS è uno dei fastidi più discussi del prodotto. Certo, c’è il plug-in Pre-Execute Debugger ma per usarlo, è necessario apportare modifiche a RDServer.file ini. Queste modifiche possono rendere inutilizzabile un progetto o persino mandare in crash il server di gestione delle soluzioni Web RedDot CMS er err server server (ho sperimentato entrambi gli scenari numerose volte). Quest’ultimo ovviamente può essere risolto con un riavvio, ma se si tratta di un sistema di produzione occupato, non è pratico.
Sicuramente, ci deve essere un modo per ottenere quegli errori dal sistema e tornare allo sviluppatore?
La soluzione
Non lo so se sono la prima persona a pensarci, ma non l’ho visto discusso prima, quindi spero che questa sia un’informazione utile.
Alcuni Background
L’ASP pre-eseguito viene reso da CMS WSMS prima di essere passato a IIS per l’esecuzione. Il codice risultante viene passato di nuovo a CMS WSMS per l’inclusione nella pagina. Anche se non lo vedi, se l’ASP fallisce, viene generato un errore 500 da IIS. Sfortunatamente, queste informazioni sull’errore 500 vengono perse quando i dati vengono passati tra CMS WSMS e IIS e viceversa.
Inserire la pagina di errore personalizzata
In IIS, è possibile impostare una pagina di errore personalizzata per ogni tipo di errore che si verifica sul server web. Questo è tradizionalmente utilizzato per fornire agli utenti finali con un significativo 404 pagina su siti web pubblicati. Possiamo sfruttare questa funzionalità per impostare una pagina di errore personalizzata per un errore 500 sul server CMS WSMS. In aggiunta a questo, la gente di Microsoft hanno visto la loro strada chiara per fornire anche un oggetto di errore che è disponibile solo da un errore 500 e restituisce una serie di informazioni utili sull’errore. Pertanto, possiamo acquisire le informazioni di errore e registrarle in un file.
Il processo
La prima cosa che dobbiamo fare è creare alcune cartelle.
- Sotto la cartella CMS WSMS (CMS/ASP), creare una cartella chiamata “PreExecute”.
- Sotto la nuova cartella, crea altri due chiamati ” log “e”asp”. L’account IUSR della macchina dovrebbe avere accesso in scrittura a entrambe le cartelle.
Quindi dobbiamo impostare le impostazioni RDExecute e PreExecute.
- Nel progetto, in “Amministrare impostazioni progetto” > “Progetto” > “Impostazioni generali”, selezionare “Modifica impostazioni” dal menu Azione.
- Sotto “RDExecute e PreExecute impostazioni”, impostare il “percorso Fisico” a “C:\Program File\RedDot\CMS\ASP\PreExecute\asp” (o il percorso della cartella, se l’installazione è diverso) e “la directory Virtuale di IIS)” a “/CMS/PreExecute/asp/”
A questo punto, verificare che il pre-esecuzione sta ancora lavorando nel progetto.
Ora per creare il gestore di errori personalizzato.
- Crea un file ASP sotto la tua cartella CMS/ASP/PreExecute/asp, chiamalo come vuoi, qualcosa come ASPError.ASP.
- Copiare il seguente codice nel file:
<% ' Create the error object. Dim objASPError Set objASPError = Server.GetLastError ' Write the error information to a file (formatting of the second argument is for readability only). WriteToFile "C:\Program Files\RedDot\CMS\ASP\PreExecute\logs\PreExecuteErrors_" & Year(Now) & Month(Now) & Day(Now) & ".log", " Date/Time: " & Now() & vbCrLf & " ASP Code: " & objASPError.ASPCode & vbCrLf & "ASP Description: " & objASPError.Description & vbCrLf & " Category: " & objASPError.Category & vbCrLf & " Column: " & objASPError.Column & vbCrLf & " Description: " & objASPError.Description & vbCrLf & " File: " & objASPError.File & vbCrLf & " Line: " & objASPError.Line & vbCrLf & " Number: " & objASPError.Number & vbCrLf & " Source: " & objASPError.Source & vbCrLf & "############################################################" & vbCrLf, True Function WriteToFile(FileName, Contents, Append) On Error Resume Next If Append = True Then iMode = 8 Else iMode = 2 End If Dim oFs, oTextFile Set oFs = Server.CreateObject("Scripting.FileSystemObject") Set oTextFile = oFs.OpenTextFile(FileName, iMode, True) oTextFile.Write Contents oTextFile.Close Set oTextFile = Nothing Set oFS = Nothing End Function %>
Infine, dobbiamo configurare IIS.
- In Internet Information Services (IIS) Manager, selezionare la cartella in “Sito Web predefinito” (o qualsiasi sito che si sta utilizzando per CMS WSMS) > “CMS” > “PreExecute” > “asp”.
- Fare clic con il pulsante destro del mouse sulla cartella e selezionare “Proprietà”.
- Seleziona la scheda” Errori personalizzati”. Scorri verso il basso fino a trovare “500;100” nella colonna degli errori HTTP.
- Evidenziarlo e fare clic su ” Modifica…”.
- Modificare il “Tipo di messaggio:” a ” URL “e impostare il” URL: “a” / CMS / PreExecute / asp / ASPError.asp”
Test
Per testare è piuttosto semplice. Supponendo che la tua pre-esecuzione funzionasse prima, dovresti essere in grado di aggiungere un codice ASP rotto al tuo modello (ad esempio <!IoRangePreExecute> < %= functionThatDoesNotExist() %><!/ IoRangePreExecute>) e visualizzare in anteprima la pagina. Dovresti ottenere la pagina di errore CMS WSMS standard (read useless) ma dovresti anche ottenere un file di registro creato nella cartella CMS/ASP/PreExecute/logs con informazioni dettagliate sull’errore ASP che si è verificato.
Avvertenze
Se si sta eseguendo un WSMS CMS cluster, si consiglia di fare attenzione con questa procedura. Quando ho provato a modificare le impostazioni di pre-esecuzione in un ambiente CMS WSMS cluster, non solo non ha funzionato, ma ha anche eliminato la pubblicazione di TUTTI i progetti. Non ho indagato ulteriormente su questo in questa fase, se e quando lo farò, pubblicherò le mie scoperte.
ASP.NET
Il metodo sopra descritto funziona solo per ASP classico. Sarebbe bello se qualcuno descrivesse il processo equivalente per ASP.NET. Qualche acquirente?