[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]

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ässt

Der 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:&nbsp;</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?&nbsp;</td>
 <td>
 <input Name=Allow Type=Radio Value=Yes CHECKED>Yes&nbsp;&nbsp;
 <input Name=Allow Type=Radio Value=No>No &nbsp;
 </td></tr>
 <tr><td COLSPAN=2><font SIZE=-2>&nbsp;</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.

[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]