Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Tracing in ASP

Geschrieben von: Christoph Wille
Kategorie: ASP Tricks

Die Möglichkeiten für ein vernünftiges Tracing unter ASP sind eingeschränkt, da man sich mit Response.Write Statements entweder das Layout zerstört, oder im Falle von notwendigen Redirects überhaupt große Probleme bekommt. Man könnte also glauben, daß es keine coole Lösung gibt - aber schließlich heißt glauben nicht wissen!

Es ist hin und wieder ganz nützlich, wenn der eigene Programmier-Background C++ ist. Denn unter C++/WIN32 gibt es etliche APIs für das Debugging, und unter diesen findet sich die Funktion OutputDebugString. Warum also nicht diese in eine Komponente verpacken und dann mit den Debugging Tools die Debugging Meldungen anzeigen?

Genau das machen wir heute, allerdings verwenden wir ein spezielles Tool, um uns die Debugging Meldungen anzeigen zu lassen: DebugView von SysInternals. Es ist erstens gratis, und kann zudem etwas zweites sehr cooles: es kann auf andere Rechner verbinden! Das heißt, man kann sich während ASP Seiten auf einem Webserver ausgeführt werden, sich die Debugging Meldungen bequem auf einer anderen Workstation ansehen - mit allen Vorteilen, ohne Nachteile!

Die AspDbg Komponente

Auf die Programmierung der Komponente möchte ich nicht allzu genau eingehen. Sie ist eine einfache ATL Komponente (also sehr schnell), und besitzt nur eine einzige Funktion, die ich eingebaut habe - zum Aufruf der OutputDebugString Funktion:

STDMETHODIMP CTrace::Write(BSTR lpszTraceString)
{
	USES_CONVERSION;
	OutputDebugString(W2A(lpszTraceString));
	return S_OK;
}

Die Komponente ist sowohl im Sourcecode als auch kompiliert als aspdbg.dll im heutigen Download mit dabei. Vor der Verwendung muß diese (wie immer) registriert werden:

regsvr32.exe aspdbg.dll

Implementierung des Tracings

Jetzt geht's an die Verwendung der Komponente. Klarerweise kann man die Komponente schon jetzt an beliebiger Stelle verwenden, allerdings sollte man sich schon die Mühe machen, eine kleine "Schnittstelle" rund um die Komponente zu programmieren.

Der Grund dafür? Nun, damit man einfach das Tracing ein- und ausschalten kann, oder eigene Zusatzparameter an den Debug-Output weitergeben kann. Ich habe eine solche einfache Schnittstelle in der Datei traceinclude.asp programmiert.

<script language="vbscript" runat="server">
Dim m_xTraceObj
Const bDebugFlag = True
Const cstrPrefix = "ASP: "

Sub TraceWrite(ByVal strTraceMessage)
  If bDebugFlag Then
    If Not IsObject(m_xTraceObj) Then
      Set m_xTraceObj = New Trace
    End If
    m_xTraceObj.Write strTraceMessage
  End If
End Sub

Sub TraceWarn(ByVal strWarnMessage)
  If bDebugFlag Then
    If Not IsObject(m_xTraceObj) Then
      Set m_xTraceObj = New Trace
    End If
    m_xTraceObj.Warn strWarnMessage
  End If
End Sub

Class Trace
 Public Sub Write(ByVal strTraceMessage)
   InternalWrite strTraceMessage
 End Sub

 Public Sub Warn(ByVal strTraceMessage)
   InternalWrite ">Warning< " & strTraceMessage
 End Sub

 Private Sub InternalWrite(ByVal strTraceMessage)
   Dim objTrace
   If bDebugFlag Then
     Set objTrace = Server.CreateObject("AspDbg.Trace")
     objTrace.Write cstrPrefix & strTraceMessage
     Set objTrace = Nothing
   End If
 End Sub
End Class

</script>

Die COM Komponente wird nur in der Funktion InternalWrite aufgerufen, die selbst in einer VBScript Klasse gekapselt ist. Der Grund hierfür ist, daß ich alle Tracing Funktionalität leicht erweiterbar in einem eigenen Objekt haben möchte - wie ASP.NET (siehe der Artikel Tracing in ASP.NET).

Das Objekt selbst greife ich nie direkt an, sondern habe weitere Wrapperfunktionen namens TraceWrite und TraceWarn geschrieben. Der Grund? Auf diese Art können auch andere Scriptsprachen ohne Umwege darauf zugreifen - auch ich verwende die Funktionen, und nicht die Objekte - so gezeigt in der Beispieldatei trace.asp.

<!-- #include file="traceinclude.asp"-->
<% Option Explicit %>
<%
TraceWrite "Das ist ein Test"
TraceWarn "Das ist eine Warnung!"
%>

Die Funktionen werden nun aufgerufen, und der Output erstellt - aber wie komme ich an diesen heran? Das ist der Punkt, wo das Programm DebugView die Bühne betritt.

Die Meldungen anzeigen

Der Mißbrauch des DebugView Tools für diese Zwecke ist ob seines großen Leistungsumfanges beinahe schon als Gemeinheit zu bezeichnen. Aber der Zweck heiligt die Mittel, wie's so schön heißt. Dennoch die Empfehlung, sich das Tool genauer anzueignen, da es auch für andere Verwendungsfälle sehr gut geeignet sein kann.

Das Programm benötigt keine Installation, nur Download und Entzippen. Daher ist es auch nach Doppelklicken auf die DbgView.Exe sofort einsatzbereit:

Hier werden die Tracing-Meldungen von trace.asp bereits angezeigt. Wer jetzt ein bischen herumexperimentiert wird sehen, daß sich auch andere Meldungen hier in diesem Fenster finden werden - außer man filtert den Output entsprechend. Dies gelingt über das Edit Menü, Menüpunkt Filter/Highlight:

Das ist auch der Grund, warum ich die Konstante cstrPrefix in traceinclude.asp definiert habe: auf diese Art und Weise limitierte ich DebugView auf die Anzeige meiner Events. Dies könnte sogar soweit gehen, daß bestimmte Funktionalitätsgruppen einer ASP Anwendung eigene Prefixes bekommen, nach denen ich dann filtern kann. Zum Beispiel zur Überwachung des Shops - das ist nur einer von vielen Anwendungsfällen.

Schuldig bin ich noch, wie man zu einem anderen Server verbindet: einfach Computer/Connect anwählen, Rechnernamen eingeben, fertig. Schon kann man den Webserver der Wahl und seine Debugging-enabled Seiten überwachen.

Apropos - ein weiteres Feature möchte ich natürlich auch nicht verschweigen: alle Logs können in Dateien exportiert werden. Ein mögliches Einsatzgebiet wäre die Testabteilung, die die Site testet, und im Fehlerfall das Tracelog zur Fehlerbehebung mitschicken kann.

Schlußbemerkung

Mit etwas Kreativität kann man ASP auch sehr sinnvolle Funktionalitäten beibringen. Allerdings sind diese meist nur mit C++ Kenntnissen zu erreichen.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Klassen in VBScript
Show me the source - Includes aufgelöst
Tracing in ASP.NET

Links zu anderen Sites

DebugView Download

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.