2010-12-02 5 views
3

Je veux trouver le chemin physique dans un site Web IIS, d'un chemin relatif à la racine du site Web, en utilisant Microsoft.Web.Administration .NET assembly .Trouver chemin physique à partir de Microsoft.Web.Administration et le chemin relatif à sa racine

Il ne semble pas une seule méthode pour ce faire, mais je me demande - est la procédure suivante la meilleure façon ?:

  1. Obtenez le Microsoft.Web.Administration.Site objet
  2. Trouvez l'application avec le plus long chemin qui correspond au début du chemin par rapport à le chemin racine
  3. bande l'application depuis le début du chemin par rapport à la racine, donnant le chemin par rapport à l'application
  4. Trouver le répertoire virtuel dans cette application avec le chemin plus long qui correspond au début de le chemin relatif à l'application
  5. bande la demande chemin depuis le début de la trajectoire par rapport à l'application , donnant le chemin par rapport au répertoire virtuel
  6. Ajoutez le chemin relatif au répertoire virtuel (permutation/pour) sur le chemin physique du répertoire virtuel pour donner le chemin physique nous voulons

Lee

+0

Avez-vous réussi à obtenir ce travail? Si oui, s'il vous plaît mis à jour avec un exemple de code –

Répondre

3

Vous êtes tout à fait raison, c'est l'algorithme de droite. Donc, pour paraphraser, assurez-vous de:
1) Trouvez le site correspondant (au cas où vous le faites en fonction du nom d'hôte ou de la liaison (ip, port, etc)).
2) Trouvez l'application dans le site correspondant au plus long sous-ensemble de l'URL restante.
3) Trouvez le VirtualDirectory dans l'application qui correspond au plus long sous-ensemble de l'URL restante.
4) Faire un Path.Combine (vdir.PhysicalPath, "restant de l'URL avec/remplacé par \")

C'est le chemin physique. Rappelez-vous que de nos jours beaucoup d'URL peuvent être logiques (dans des scénarios comme MVC ou Rewriting), donc vous n'avez pas vraiment de vrai chemin physique.

3

Je trouve le code suivant pour obtenir le chemin

ServerManager sm = new ServerManager(); 
sm.Sites["Default Web Site"].Applications["/"].VirtualDirectories["/"].PhysicalPath; 

http://forums.iis.net/t/1146686.aspx/1

1

Pour répertorier tous chemin virtuel et physique d'un serveur:

Dim stringIIS As String = String.Empty 
Dim serverName As String = "MACHINE_NAME" 
Dim sm1 As New ServerManager() 

     Using sm As Microsoft.Web.Administration.ServerManager = Microsoft.Web.Administration.ServerManager.OpenRemote(serverName) 

      Dim counter As Integer = 1 

      For Each Site As Microsoft.Web.Administration.Site In sm.Sites 

       stringIIS = "Site: " & Site.Name & (vbNewLine) 

       For Each app As Microsoft.Web.Administration.Application In sm.Sites(Site.Name).Applications 
        stringIIS = stringIIS & "  Physical Path: " & (vbTab & sm1.Sites(Site.Name).Applications("/").VirtualDirectories("/").PhysicalPath().ToString() & vbNewLine) 

        For Each virtDir As Microsoft.Web.Administration.VirtualDirectory In app.VirtualDirectories 
         stringIIS = stringIIS & "  Virtual Path: " & (vbTab & app.Path & vbNewLine) 
         stringIIS = stringIIS & vbNewLine 
        Next 
       Next 

       counter += 1 

      Next 

      iis.Text = stringIIS 
      iis.Visible = True 
     End Using