Avatar billede steenk Nybegynder
16. april 2004 - 15:36 Der er 4 kommentarer og
1 løsning

Reference til dll for at instantiere IIS Admin objekter ?

Følgende virker fint med VBSript:

option Explicit
Dim strRoot, oRoot, object, obj
strRoot = "IIS://LocalHost/W3SVC"
Set oRoot = GetObject(strRoot)
listObjectTree oRoot
Sub listObjectTree(object)
    for each obj in object
          wscript.Echo "Name: " & obj.name & " - Class: " & obj.Class & " - Path: " & obj.ADsPath
          listObjectTree obj
    Next
End Sub

MEN jeg ønsker at gøre det samme (+ en masse mere!) i en Visual Basic applikation og har derfor brug for at sætte en reference til den dll hvor IIS Admin COM objekterne er defineret. Bla. for at opnå adgang til intellisense

Er der nogen der kender svaret ?
Avatar billede kedde65 Praktikant
16. april 2004 - 18:42 #1
Det kan du ikke ummidelbart gøre, da det kode du skriver her er kode der tilgår Webservice Servicen, via Active Directory og derfor er det Activ Directory objekter du udskriver værdier på.

Eksemepelvis obj.ADsPath er stien i ActiveDirectory, og det er en egenskab der findes på alle objekter i AD.

Men hvad er det præcis du kunne tænke dig at gøre med dette, så skal jeg se om jeg kan hjælpe dig.

VH CK
Avatar billede danauktion Nybegynder
16. april 2004 - 23:53 #2
Det kan sagtens lade sig gøre :-) men det er selvfølgelig en kompleks opgave.
Jeg har lavet flere componenter, som benyttes til automatisk installation af applikationer på IIS'en og i den forbindelse har jeg benyttet ADSI til formålet  - og det kodeeksempel du har afleveret er uden sammenhæng med web-services, det er ren IIS stuff.
De referencer som er nødvendige for at jonglere med disse objekter i VB er flg.:
Active DS IIS ext dll  ------ isext.dll
Active DS Namespaceprovider ---adsis.dll
Active DS Typelibrary  --------activeds.tlb

Jeg vil for overskuelighedens skyld anbefale dig at oprette classe moduler med mappede funktioner, da du ellers vil miste overskueligheden totalt i løbet af ganske kort tid.
Jeg oprettede f.eks. 3 klasser med de rudimentære funktioner, til FTPManagement, SiteManagement og WebManagement.
Herefter oprettede jeg et class module til mit eget formål, som mappede funktionerne fra de 3 underklasser over i min egen klasse så jeg opnåede både intellisense og undgik at unødige funktioner blev vist i min klasse, som herefter kunne benyttes af applikationsprogrammørerne både i vb-script og i vb.
Held og lykke
Avatar billede danauktion Nybegynder
18. april 2004 - 09:12 #3
Og så skulle jeg måske lige huske at sige at fordelen ved at mappe funktionerne i en seperat klasse, (også) er at det er den eneste måde at implementere intellisense på disse funktioner da typerne langt hen ad vejen er strings og dermed kan indeholde hvad som helst. Derfor skal mapningen være i din egen klasse implementeres med enums eller med en masse mere specifikke funktioner eller en kombination af begge.
Avatar billede steenk Nybegynder
19. april 2004 - 13:17 #4
Hej danauktion,

Tak for referencerne. Jeg er gået i krig med VS6, men har lidt problemer med at instantiere objekterne. Det skal jo være bestemte instanser af webservice, virtualdir osv. Kan du give et par simple eksempler på noget du har kodet (VB)?
Avatar billede danauktion Nybegynder
19. april 2004 - 13:27 #5
Oprettelse af et Site i klassen IISSiteManagement:

Public Function CreateSite(ByVal TargetComputer As String, ByVal IISService As String, ByVal SiteName As String, ByVal SitePath As String) As Boolean
    Dim Parent As IADs
    Dim Child As Variant
    Dim NewSite As IADs
    Dim NewRoot As IADs
    Dim Index As Double
    Select Case UCase(IISService)
        Case "WWW"
            Set Parent = GetObject("IIS://" & TargetComputer & "/W3SVC")
        Case "FTP"
            Set Parent = GetObject("IIS://" & TargetComputer & "/MSFTPSVC")
        Case "SMTP"
            Set Parent = GetObject("IIS://" & TargetComputer & "/SMTPSVC")
        Case "NNTP"
            Set Parent = GetObject("IIS://" & TargetComputer & "/NNTPSVC")
    End Select
    For Each Child In Parent
        If IsNumeric(Child.Name) Then
            If Index < Child.Name Then
                Index = Child.Name
            End If
        End If
    Next
    Index = Index + 1
    Select Case UCase(IISService)
        Case "WWW"
            Set NewSite = Parent.Create("IIsWebServer", Index)
            NewSite.ServerComment = SiteName
            NewSite.approot = SitePath
            NewSite.SetInfo
            Set NewRoot = NewSite.Create("IIsWebVirtualDir", "Root")
            NewRoot.Path = SitePath
       
            Err.Number = 0
            NewRoot.SetInfo
        Case "FTP"
            Set NewSite = Parent.Create("IIsFTPServer", Index)
            NewSite.ServerComment = SiteName
            NewSite.SetInfo
            Set NewRoot = NewSite.Create("IIsFTPVirtualDir", "Root")
            NewRoot.Path = SitePath
            Err.Number = 0
            NewRoot.SetInfo
    End Select
    If Err.Number = 0 Then CreateSite = True
End Function

Oprettelse af et Site i den mappede klasse:
Function CreateWWWSite(Servername As String, SiteName As String, SitePath As String, Optional IndexServer = True) As Boolean

Dim Site As New IISAdmin.IIsSiteManagement
Dim res As Boolean
Dim SiteIndex As Double

On Error Resume Next
IISFunc.MakeDirPath (SitePath)
CreateWWWSite = Site.CreateSite(Servername, "WWW", SiteName, SitePath)
SiteIndex = GetWWWSiteIndex(Servername, SiteName)
If IndexServer Then VirDir_SetIndexing "Root", Servername, True, "WWW", SiteIndex
End Function

Håber det giver lidt inspiration :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester