Zu Illustrationszwecken habe ich ein neues Form2 in mein VB Projekt aufgenommen und auf dem Commandbutten im Click Event folgenden Code eingetragen: Private Sub Command1_Click() Set ox = New aspexe.cASPEXE Print ox.gettesttime() Set ox = Nothing End Sub Das Referenzieren der Type Library zur Design Zeit hat einige Vorteile. Nicht nur Performance mässig sondern vor allem auch hinsichtlich der Code Completion und Syntaxprüfung zur Programmierzeit:
VB kennt sogar unsere Klasse in der Server Komponente:
Um unseren OLE Server mit dem VB Form2 testen zu können müssen wir Form2 als Startup Form definieren und wir können die Applikation laufen lassen:
Erst wenn unser OLE Server diese Tests erfolgreich überstanden hat, können wir und den weiteren Schritten zuwenden. Tip: Verwenden Sie nie einen ungetesteten OLE Server. Bestehen Sie darauf, dass immer zunächst ein isolierter Funktionstest z.B. mit VFP und/oder VB als Hosting Komponente durchgeführt wird. Dies ist einfach und erspart Ihnen anschliessend die viel aufwendigeren Debugging Sessions im Internet Information Server Umfeld wo Blindflüge ohne Instrumente meist früher oder später zu teuren Bruchlandungen führen! Sicherstellen, dass der Webserver OutofProcess Ole Server zulässtDer Internet Information Server 4.0 ist bezüglich der Architektur wie Actiev Server Komponenten in Form von ASP Anwendungen oder konventionelle ActiveX Server Komponenten gegenüber IIS 3.0 einiges zugelegt. Neu kann man, und soll auch, ASP Applikationen im eigenen Adressbereich fahren. Bei den ActiveX OLE Servers ist es deshalb so, dass IIS 4.0 standardmässig davon ausgeht, dass diese innerhalb der Active Server Applikation als DLL betrieben werden. Will man nun einen Out of Process OLE Server aus einer Active Server Page heraus instanziieren, so wird dies zunächst einmal nicht klappen. Mit der Einführung von IIS 4.0 werden Konfigurationen neu nicht mehr wie bisher üblich in der Registray sondern neu in der sogenannten Matabase verwaltet. Dies hat den grossen Vorteil, dass wir als Programmierer endlich aktiv in die Systemkonfiguration eingreifen können. Genau dies ist erforderlich, bevor Out of Process OLE Servers ablaufen können. Zu diesem Zweck kann folgende ASP Komponente verwendet werden, welche im übrigen sehr schön Illustriert, wie mit der Metabase kommuniziert wird:
Der ASP Code sieht folgendermassen aus: <%@ Language=VBScript EnableSessionState=False %> <% Option Explicit Dim strLogon strLogon = Request.ServerVariables("LOGON_USER") If IsEmpty(strLogon) Or strLogon = "" Then Response.Status = "401 Access Denied" Response.End End If %> <HTML> <HEAD> <TITLE>AspAllowOutOfProcComponents</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF> <h2>Setting AspAllowOutOfProcComponents</h2> <% Dim strServer,strSite,strObject,oWebDirectory,strAllow On Error Resume Next strServer = Request.ServerVariables("SERVER_NAME") If Request.ServerVariables("HTTP_METHOD") = "POST" Then strSite = Trim(Request.Form("Site")) If strSite = "<approot>" Or strSite = "" Then '--- This form is used to add the setting on the IIsWebService object strObject = "IIS://" & strServer & "/W3svc" Else '--- This form is used to add the setting on the IIsVirtualDir object strObject = "IIS://" & strServer & "/W3svc/" & Trim(Request.Form("Root")) & "/root/" & strSite End If Response.Write "<p>Admin Object: <b>" & strObject & "</b></p>" Set oWebDirectory = GetObject(strObject) If Err Then Response.Write "<p><font COLOR=Red>ERROR</font>: " & Hex(Err.Number) & ": " & Err.Description & "<BR>" Response.Write "This object doesn't exist, or you don't have permission to access the metabase." Else strAllow = Request.Form("Allow") Response.Write "Setting AspAllowOutOfProcComponents = " & strAllow & "<BR>" ' Enable AspAllowOutOfProcComponents If strAllow = "Yes" Then oWebDirectory.Put "AspAllowOutOfProcComponents", True Else oWebDirectory.Put "AspAllowOutOfProcComponents", False End If ' Save the changed value to the metabase oWebDirectory.SetInfo If Err Then Response.Write "<p><font COLOR=Red>ERROR</font>: " & Hex(Err.Number) & ": " & Err.Description & "<BR>" Response.Write "An error occurred while processing your request." Else Response.Write "<p><b>SUCCESS</b>: You must restart the Web server service for this change to take effect." End If End If Else %> <form Action="<%= Request.ServerVariables("SCRIPT_NAME") %>" Method=POST> <table BORDER=0> <tr><td BGCOLOR=#C0C0C0>Admin Object: </td> <td> <b>IIS://<%=strServer%>/W3svc/ <input Name=Root Value="1" SIZE=1>/root/ <input Name=Site Value="<approot>" SIZE=24></b> </td></tr> <tr><td BGCOLOR=#C0C0C0>Allow OOP components? </td> <td> <input Name=Allow Type=Radio Value=Yes CHECKED>Yes <input Name=Allow Type=Radio Value=No>No </td></tr> <tr><td COLSPAN=2><font SIZE=-2> </font></td></tr> <tr><td COLSPAN=2 ALIGN=Left><INPUT Type=Submit Value=" Set "></td> </tr> </table> </form> <p>You are logged on as <b><%= strLogon %></b>. <% End If %> </body> </html> Denken Sie daran, Ihren Web Server anzuhalten und wieder zu starten. Ansonsten wird diese Einstellung nicht aktiv. |