.NET-Komponenten in Classic ASP verwenden, was haltet ihr davon?

  • ASP

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von jmar83.

    .NET-Komponenten in Classic ASP verwenden, was haltet ihr davon?

    Hallo zusammen

    Damit meine ich bspw. sowas:

    Visual Basic-Quellcode

    1. Sub test1()
    2. Dim DataList: Set dataList = CreateObject("System.Collections.ArrayList")
    3. DataList.Add "B"
    4. DataList.Add "C"
    5. DataList.Add "E"
    6. DataList.Add "D"
    7. DataList.Add "A"
    8. DataList.Sort()
    9. Dim strItem
    10. For Each strItem in DataList
    11. Response.Write strItem
    12. Next
    13. End Sub



    Es gibt ein paar Kriterien für .NET-Assemblies/Objekte:

    Compiler:
    - "Register for COM Interop" muss bei den Projekt-Build-Settings eingeschaltet sein
    - ComVisible in der AssemblyInfo.cs muss auf "true" sein. -> [assembly: ComVisible(true)]


    OO-technisch:

    - Die Klasse muss einen Default-Konstruktor (zusätzlich dürfen aber Konstuktoren mit Argumenten vorhanden sein - diese kann man einfach nicht ansprechen in VBScript / ASP) und die Sichtbarkeitsstufe "public" haben, andernfalls kann man die Klasse nicht mit CreateObject(...) laden, völlig unmöglich.
    -> Dieser Konstruktor muss auch die Sichtbarkeitsstufe "public" haben!! (Also bspw. kein Singleton-Pattern oder Factory-Methode mit priv. Konstruktor!)
    - Die Klasse muss eine "richtige Klasse" sein -> Kein Enum, Interface, abstrakte Klasse usw.


    Was haltet ihr von diesem Ansatz? Selbstprogrammierte Assemblies haben oft Sicherheitsprobleme, da muss man bei den IIS-Einstellungen noch was anpassen. Aber die Assemblies auf dem System.Collections-Packet kann man meist problemlos verwenden, wie oben in meinen Beispiel demonstriert...


    VBScript/ASP ist für mich als Java-Programmierer (Job-mässig war der letzte Stand Java 1.6) manchmal eine Qual, ehrlich gesagt. Zwar extrem einfach, aber auch extrem eingeschränkt...
    .Net-Klassen habe ich auch schon öfters verwendet in VBS und VBA.
    Ich habe mich dann ab und zu gewundert, dass sich manche Klassen nicht instantiieren lassen, mir aber nicht weiters den Kopf darüber zerbrochen.

    Dass es an dem Konstruktor liegt, klingt plausibel.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo petaod

    Was mir aufgefallen ist, ist dass scheinbar die Klassen, welche beschreibenen Kriterien entsprechen, in dem Collections-Namespace als "COMVisible" kompiliert wurden.

    Weisst du noch ein paar COMVisible-Enabled-Klassen des Frameworks? Leider finde ich aktuell nix im Netz wenn ich danach googlen tu... eine Auflistung dafüber wäre natürlich interessant...