- RedDot CMS-Blog
- 15.11.2019
- NL
rdb: Debugging Pre-Uitgevoerd (classic) ASP
Het Probleem
ik ben er zeker van dat vrijwel elke RedDot CMS Web Solutions Management Server developer zou zijn gekomen tegen een aantal pre-uitgevoerd ASP in hun sjablonen die is mislukt. De daaruit voortvloeiende frustratie op het hebben van geen ingebouwde methode van debuggen of zelfs gewoon het krijgen van een soort van betekenisvolle foutmelding uit de CMS WSMS is een van de meest besproken ergernissen van het product. Zeker, er is de pre-Execute Debugger plug-in, maar om dat te gebruiken, moeten wijzigingen worden aangebracht aan de RDServer.ini file. Deze wijzigingen kunnen een project onbruikbaar maken of kan zelfs crashen de RedDot CMS Web Solutions Management Server … err … server (Ik heb beide scenario ‘ s vele malen ervaren). Dat laatste kan natuurlijk opgelost worden door een reboot, maar als dit een druk productiesysteem is, is dat gewoon niet praktisch.
er moet toch een manier zijn om deze fouten uit het systeem en terug naar de ontwikkelaar te krijgen?
de oplossing
ik weet niet of ik de eerste persoon ben die hieraan Denkt, Maar ik heb het nog niet eerder besproken gezien dus hopelijk is dit nuttige informatie.
Enige achtergrond
vooraf uitgevoerde ASP wordt gerenderd door CMS WSMS voordat deze wordt doorgegeven aan IIS om uit te voeren. De resulterende code wordt doorgegeven aan CMS WSMS voor opname in de pagina. Hoewel u het niet ziet, wordt als de ASP faalt, een 500-fout gegenereerd door IIS. Helaas gaat deze informatie over de 500-fout verloren als gegevens worden doorgegeven tussen CMS WSMS en IIS en weer terug.
Voer de aangepaste foutpagina
onder IIS is het mogelijk om een aangepaste foutpagina in te stellen voor elk type fout dat zich op de webserver voordoet. Dit wordt traditioneel gebruikt om eindgebruikers te voorzien van een zinvolle 404 pagina op gepubliceerde websites. We kunnen deze functionaliteit gebruiken om een aangepaste foutpagina in te stellen voor een 500-fout op de CMS WSMS-server. Naast deze, de mensen bij Microsoft hebben gezien hun weg duidelijk om ook een fout object dat alleen beschikbaar is van een 500 fout en geeft een heleboel nuttige informatie over de fout. Zo kunnen we de foutinformatie vastleggen en in een bestand loggen.
het proces
het eerste wat we moeten doen is enkele mappen maken.
- maak onder uw CMS wsms-map (CMS / ASP) een map aan met de naam “PreExecute”.
- maak in de nieuwe map nog twee “logs” en “asp”aan. Het IUSR-account van de machine moet schrijftoegang hebben tot beide mappen.
vervolgens moeten we de Instellingen RDExecute en PreExecute instellen.
- in uw project, onder “projectinstellingen beheren” > “Project” > “Algemene instellingen”, selecteer “Instellingen bewerken” in het menu Actie.
- onder “RDExecute and PreExecute settings”, stel het “Physical path” in op “C:\Program bestanden\RedDot\CMS\ASP\PreExecute\asp” (of het pad naar uw map als uw installatie anders is) en de” Virtual directory (IIS) “naar” /CMS / PreExecute / asp/”
controleer op dit punt of uw pre-execution nog steeds werkt in uw project.
om nu de aangepaste foutafhandeling aan te maken.
- Maak een ASP-bestand aan onder je CMS/ASP/PreExecute / asp-map, noem het wat je wilt, zoiets als ASPError.ASP.
- kopieer de volgende code naar het bestand:
<% ' 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 %>
tot slot moeten we IIS configureren.
- selecteer in IIS-beheer (Internet Information Services) de map onder “Default Web Site” (of welke site u ook gebruikt voor CMS WSMS) > “CMS” > “PreExecute” > “asp”.
- Klik met de rechtermuisknop op de map en selecteer “Properties”.
- Selecteer het tabblad “Aangepaste fouten”. Scroll naar beneden tot je “500;100” in de HTTP Error kolom vindt.
- markeer het en klik op ” Edit…”.
- Wijzig het “Message type: “naar” URL “en stel de” URL: “in op” /CMS/PreExecute/asp/ASPError.asp”
het testen van
om het te testen is vrij eenvoudig. Aangenomen dat uw pre-execution eerder werkte, zou u in staat moeten zijn om een aantal kapotte ASP-code aan uw template toe te voegen (bijvoorbeeld <!Iorangepreeks><% = functie die niet bestaat() %><!/ Iorangeprexecute>) en een voorbeeld van de pagina. Je zou de standaard (lees nutteloos) CMS WSMS fout Pagina moeten krijgen maar je zou ook een log bestand moeten krijgen aangemaakt in je CMS/ASP/PreExecute/logs map met gedetailleerde informatie over de ASP fout die is opgetreden.
waarschuwingen
als u een geclusterd CMS WSMS uitvoert, kunt u beter voorzichtig zijn met deze procedure. Toen ik probeerde het veranderen van de pre-uitvoering instellingen onder een geclusterde CMS WSMS-omgeving, het werkte niet alleen niet, het nam ook de publicatie van alle projecten. Ik heb dit niet verder onderzocht in dit stadium, als en wanneer ik dat doe, zal ik mijn bevindingen posten.
ASP.NET
de hierboven beschreven methode werkt alleen voor klassieke ASP. Het zou geweldig zijn als iemand zou beschrijven het gelijkwaardige proces voor ASP.NET wie wil er?