ASP Classic

Zwischen ASP und ASP.NET vermitteln

Austausch von Daten über XML

ASP ist eine feine Sache, da man damit relativ schnell ansprechende Ergebnisse in Form von dynamischen Web-Seiten erzielen kann. Einziges Manko ist, dass die Sprache zum einen schon relativ alt ist und zum anderen man beim Programmieren von bestimmten Funktionalitäten auf externe Komponenten angewiesen ist.

ASP.NET hingegen bietet dem Entwickler wesentlich mehr Möglichkeiten, ist aber eine neue Sprache, die dem Entwickler quasi abverlangt seine Seiten zu großen Teilen neu zu gestalten, um diese Möglichkeiten auszureizen.

In vielen Fällen, wo ein funktionierendes ASP-Web vorliegt und der Server auch mit ASP.NET zurecht kommt, ist zu überlegen, ob man nicht die fehlende Funktionalität von ASP einfach mit ASP.NET erweitert. Ist jedoch eine strikte Trennung zwischen den beiden Sprachen notwendig, kommt man nicht umhin ein Modell zu entwickeln, in dem die beiden lediglich miteinander kommunizieren.

Als praktisches Beispiel kann die Auflösung des DNS-Host-Names dienen, das im Artikel "Mit der IP-Adresse den Host-Namen auflösen" beschrieben ist. Problem: man verfügt nicht über eine entsprechende auf dem Server installierte Komponente, die den Job in ASP erledigen kann, will die Funktionalität aber in eine Seite einbauen.

Erster Ansatzpunkt für die Überlegung wie man eine solche Kommunikation hinbekommen kann, sind die in .NET eingeführten Web-Services. Diese kommunizieren in XML. Was liegt also näher als für die Kommunikation zwischen ASP und ASP.NET ebenfalls XML zu verwenden.

ASP.NET

Zu diesem Zweck bohren wir die erwähnten Artikel ASP.NET-Seite (ASPX) so auf, dass sie statt HTML XML auswirft. Dabei wandern zunächst die Direktiven in eine Zeile, um eine unnötige erste Leerzeile zu verhindern, und legen über Response.ContentType fest, dass der Auswurf der ASP.NET-Seite XML sein soll:

<%@ Page Language="vb" %><%@ Import Namespace="System.Net" %>
<% Response.ContentType="text/xml" %><?xml version="1.0" encoding="utf-8"?>

Als nächstes kommt direkt das Server-Script, dass zum einen um das Reverse-Lookup von Host-Name zu IP-Adresse erweitert wurde und dessen Prozeduren in Funktionen mit Eingangsparameter und Rückgabewert umgewandelt wurden. Konnte ein Adresse nicht aufgelöst werden, so wird ein Leerstring zurückgegeben.

<script runat="server">
    Function LookUpHost(strIP as String) As String
        Try
            Dim HostInfo As IPHostEntry = Dns.GetHostByAddress(strIP)
            LookUpHost = HostInfo.HostName
        Catch ex As Exception
            LookupHost = ""
        End Try
    End Function

    Function LookUpIP(strHost as String) As String
        Try
            Dim HostInfo As IPHostEntry = Dns.GetHostByName(strHost)
            LookUpIP = HostInfo.AddressList(0).ToString()
        Catch
            LookUpIP = ""
        End Try
    End Function
</script>

Statt des HTML-Gerüsts aus dem erwähnten Artikel, wird nun ein Stück ASP-Code verwendet, dass als erstes etwaige Übergabeparameter ausliest und dann entscheidet was zu tun ist. Das Ergebnis wird in zwei Variablen (strIP und strHost) gespeichert.

<%
    Dim strIP, strHost

    'Übergabeparameter auslesen, falls vorhanden
    strIP = Request.QueryString("ip")
    strHost = Request.QueryString("host")

    'Entscheidung was umgewandelt werden soll
    If Len(strIP) > 0 then
        'IP-Adresse zu Host-Name
        strHost = LookUpHost(strIP)
    ElseIf Len(strHost) > 0 then
        'Host-Name zu IP-Adresse
        strIP = LookUpIP(strHost)
    Else
        'Standard (Localhost), falls keine Parameter übergeben wurden
        strIP = "127.0.0.1"
        strHost = LookUpHost(strIP)
    End if

    'Ausnahme, falls Lookup fehlgeschlagen
    If Len(strIP) = 0 then strIP = "Unable to resolve"
    If Len(strHost) = 0 then strHost = "Unable to resolve"
%>

Als letztes wird nun der Inhalt in einer festgelegten XML-Struktur ausgegeben:

<info>
    <ip><%=strIP%></ip>
    <hostname><%=strHost%></hostname>
</info>

Wird nun die Seite im Browser aufgerufen so wird folgendes ausgeworfen:

Aufruf:   http://www.meinedomain.de/getdnsinfo.aspx?host=www.yahoo.de

ASP

Nun zur ASP-Seite. Um das in ASP.NET erzeugte XML zu verarbeiten verwenden wir das Objekt ServerXMLHTTP des XML-Parsers MSXML von Microsoft. Die Kommentare der nachfolgenden ASP-Funktion beschreiben die einzelnen Schritte, die zum Auslesen der XML-Datei notwendig sind:

<%
Public Function GetHostName(strIP)

    If Len(strIP) > 0 Then
       
        'URL zur ASP.NET-Seite festlegen und im den IP-Parameter ergänzen
        strURL = "http://www.zerbit.de/nettools20/getdnsinfo.aspx?ip=" & strIP

        'Parser-Objekt initialisieren und XML-Daten abrufen
        Set objXMLHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")
        objXMLHTTP.Open "GET", strURL, False
        objXMLHTTP.Send()

        'XML-DOM-Dokument initialisieren und mit den XML-Daten bestücken
        Set objDoc = Server.CreateObject("MSXML2.DOMDocument")
        Set objDoc = objXMLHTTP.ResponseXML

        'Benötigtes Element aus dem XML-Baum in Node-Objekt ablegen
        Set objNode = objDoc.selectSingleNode("//info/hostname")

        'Wert des Nodes auslesen
        GetHostName = objNode.text

        'Alle Objekte wieder zerstören
        Set objNode = Nothing
        Set objDoc = Nothing
        Set objXMLHTTP = Nothing
    End If

End Function
%>

Diese Funktion kann man in den eigenen ASP-Seiten nun beliebig oft verwenden, wenn man sie in eine externe ASP-Seite schreibt (z.B. "tools.asp") und auf der jeweiligen Seite mit <!--#include virtual="/tools.asp" //--> einbindet. Der Code ist für eine Funktion die aus einem Host-Namen die IP-Adresse ermittelt entsprechend anzupassen.

Fazit

Mit der hier dargestellten Vorgehensweise kann man relativ leicht Daten zwischen ASP.NET und ASP vermitteln. Das Beispiel kann als Vorlage für weitere Implementierungen dienen, in denen Daten zwischen den beiden Welten ausgetauscht werden müssen.

Besonders interessant ist das Beispiel für Sie, wenn Sie nicht über einen .NET-fähigen Server verfügen. In diesem Fall können Sie die hier dargestellte ASP.NET-Seite verwenden. Der Aufruf lautet:

http://www.meinedomain.de/getdnsinfo.aspx

Zwei Parameter sind gültig:

  • ?ip=<IP-Adresse>
  • ?host=<Host-Name>
kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

Keine Kommentare bislang...

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 41

  • Datum: 17.07.2005
    Kategorie: ASP Classic
    Zugriffe: 2.206
    Kommentare: 0
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei