2010-12-23 26 views

cevap

93

Bunu yapmanın yolu, sitenizdeki tüm uygulamaların düzleştirilmiş bir ağacı olan Site.Applications koleksiyonunu işlemektir.

Bu örnekler için, içeriğin yerel sabit diskte yer aldığı "MySite" adlı bir site varsayalım: d:\mysite\www. Sitenin IIS numarası 3 olup site "MySite" olarak da adlandırılan kendi uygulama havuzunda bulunur.

Biz de

alt text

biz siteyi almak ile biz değişken site boyunca kullanacağız bir uygulama eklemek istediğiniz başlatmak için site için aşağıdaki klasör yapısını varsayıyoruz:

// Get my site 
Site site = serverManager.Sites.First(s => s.Id == 3); 

kök "/" uygulaması:

Her sitenin bir "kök" uygulaması vardır. Biz %systemroot%\windows\system32\inetsrv\config bulunan applicationHost.config açıp sitemiz için <site> düğümün yerini ise şunları görürüz:

<site name="MySite" id="3"> 
    <application path="/" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\mysite\www" /> 
    </application> 
</site> 

Her <site><application> 's koleksiyonu içerir. Kök uygulamasını tanımlayan en az bir uygulama her zaman olacaktır, /.

applicationPool özniteliği, hangi uygulama havuzunu kullanacağını belirtir.

Tek bir alt öğe olduğunu unutmayın: virtualDirectory.

Her application modelinde virtualDirectory öğelerinden oluşan bir alt koleksiyon var ve bu koleksiyonda genellikle en az bir öğe bulunacaktır.

kök uygulama içinde varsayılan <virtualDirectory> söyler:

  • bu kök (path="/") ve fiziksel olarak d:\MySite\www (physicalPath="d:\MySite\www") de dosya sisteminde bulunur o
  • olduğunu.

her virtualDirectory arasında path üst application yolunda belirtilen path görelidir.

Bir sanal dizin ekleme:

Application rootApp = site.Applications.First(a => a.Path == "/"); 
rootApp.VirtualDirectories.Add("/vdir_1", @"D:\MySite\other_content"); 
serverManager.CommitChanges(); 

çıkan: biz yapardım dosya sistemi üzerinde başka bir yere eşleştirilmiş "site köküne" için bir sanal dizin eklemek istiyorsa

yapılandırma benziyor:

<site name="MySite" id="3"> 
    <application path="/" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="D:\MySite\www" /> 
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" /> 
    </application> 
</site> 

Ve IIS Yöneticisi'nde görüyoruz:

alt text

varolan sanal dizin sanal dizin ekleme:

root.VirtualDirectories.Add("/vdir_1/sub_dir1", @"d:\MySite\more_content"); 

bu sonuçlanır: biz yapardım vdir1 bir çocuk sanal dizin eklemek istiyorsa

:

( ) 10 IIS Yöneticisi:

sanal dizinleri eklerken akılda tutulması gereken birkaç şey var

alt text

:

  • belirtildiği gibi, sanal path daima üst uygulamadan path
  • göredir sanal bir path örneğinin son kısmı /vdir_1 ve .../sub_dir1 sanal dizin adı olur
  • Aynı fiziksel klasöre sanal dizin yolu adı kısmının haricinde
  • , yolun tüm bölümlerine birden fazla sanal dizin noktasına sahip olacak derece yasal , web sitesi kökünde (d:\MySite\www) fiziksel yollar veya sanal yollar olarak olmalıdır. diğer bir deyişle, path, zaten var olan bir şeyin üstesinden gelebilmelidir, aksi halde IIS yöneticisi içinde sanal bir dizin görünmeyecektir. Bu son nokta ile ilgili olarak

, örneğin, fiziksel bir klasör yoksa veya sanal dizin /vdir_2 denilen ancak aşağıdaki kod tamamen yasaldır şudur: /vdir_2/sub_dir1 göstermek görmez

root.VirtualDirectories.Add("/vdir_2/sub_dir1", @"d:\MySite\even_more_content"); 

IIS yöneticisinde ancak yasaldır ve aslında buna göz atabilirsiniz. Ayrıca applicationHost.config görebiliyorum:

<site name="MySite" id="3"> 
    <application path="/" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="D:\MySite\www" /> 
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" /> 
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" /> 
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" /> 
    </application> 
</site> 

dönüştürme Klasör Uygulamasına:

süre önce bir ASP yüklendi edin.

<site name="MySite" id="3"> 
    <application path="/" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="D:\MySite\www" /> 
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" /> 
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" /> 
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" /> 
    </application> 
    <application path="/app_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" /> 
    </application> 
</site> 

: applicationHost.config yılında

Application app = site.Applications.Add("/app_1", @"d:\MySite\www\app_1"); 
// set application pool, otherwise it'll run in DefaultAppPool 
app.ApplicationPoolName = "MySite"; 
serverManager.CommitChanges();  

yeni bir <application> unsur eklendi görebilirsiniz: Sitenizdeki /app_1 klasörüne NET uygulama ve Bunu yapmamızı kendi Uygulaması çevirmeye istiyorum IIS biz bakın:

alt text

Bu yapmanın eşdeğerdir "Co sağ tıklayın Uygulamaya ters. Mevcut Uygulamaya

Ekleme Uygulama:

varolan uygulamanın bir çocuk gibi bir uygulama eklemek çok basittir. Biz /app_1/sub_app_1/app_1 bir alt uygulama yapmak istiyorum ki:

alt text

Biz sadece yapacağını:

Application app = 
    site.Applications.Add("/app_1/sub_app_1", @"d:\mysite\www\app_1\sub_app_1"); 
app.ApplicationPoolName ="MySite"; 

çıkan yapılandırma gibi görünecektir:

IIS
<site name="MySite" id="3"> 
    <application path="/" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="D:\MySite\www" /> 
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" /> 
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" /> 
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" /> 
    </application> 
    <application path="/app_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" /> 
    </application> 
    <application path="/app_1/sub_app_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\mysite\www\app_1\sub_app_1" /> 
    </application> 
</site> 

:

alt text

Uygulamasına Sanal dizin ekleyin:

Şimdi biz yapacağını bu uygulamaya bir sanal dizin eklemek istedim: Biz yeni <virtualDirectory> eleman vardır görebilirsiniz applicationHost.config yılında

Application app = site.Applications.First(a => a.Path == "/app_1"); 
app.VirtualDirectories.Add("/vdir_1", @"d:\MySite\other_content"); 

eklenmiştir:

<site name="MySite" id="3"> 
    <application path="/" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="D:\MySite\www" /> 
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" /> 
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" /> 
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" /> 
    </application> 
    <application path="/app_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" /> 
    <virtualDirectory path="/vdir_1" physicalPath="d:\MySite\other_content" /> 
    </application> 
</site> 

IIS'de şunu görüyoruz:

alt text

Yine sanal yol /vdir1 hep içeren uygulamanın yoluna göreceli olduğuna dikkat etmek önemlidir. Uygulamaya Sanal dizin Mevcut

dönüştürme:

biz bir uygulamaya az önce oluşturduğumuz sanal dizin (/app_1/vdir1) dönüştürmek istiyorsa ne olacak?Biz iki adımda bunu yapmak gerekir:

// Get the application 
Application app_1 = site.Applications.First(a => a.Path == "/app_1"); 
// Find the virtual directory 
VirtualDirectory vdir_1 = app_1.VirtualDirectories.First(v => v.Path == "/vdir_1"); 
// Remove it from app_1 
app_1.VirtualDirectories.Remove(vdir_1); 
// Create our application 
Application vdir_1_app = site.Applications.Add("/app_1/vdir_1", vdir_1.PhysicalPath); 
// set application pool, otherwise it'll run in DefaultAppPool 
vdir_1_app.ApplicationPoolName = "MySite"; 
serverManager.CommitChanges();  

çıkan applicationHost.config benziyor: IIS Yöneticisi'nde

<site name="MySite" id="3"> 
    <application path="/" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="D:\MySite\www" /> 
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" /> 
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" /> 
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" /> 
    </application> 
    <application path="/app_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" /> 
    </application> 
    <application path="/app_1/vdir_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\MySite\other_content" /> 
    </application> 
</site> 

gördüğümüz:

alt text

için Uygulama Ekle Mevcut Sanal Dizin:

Sanal dizine bir uygulama eklemek istiyorsak ne olur, bu nasıl çalışır? Bu örnekte, daha önce oluşturduğumuz sanal dizin /vdir_1/sub_dir1'a bir uygulama ekleyeceğiz. Gördüğümüz

<site name="MySite" id="3"> 
    <application path="/" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="D:\MySite\www" /> 
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" /> 
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" /> 
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" /> 
    </application> 
    <application path="/app_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" /> 
    </application> 
    <application path="/app_1/vdir_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\MySite\other_content" /> 
    </application> 
    <application path="/vdir_1/sub_dir1/app_2" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\mysite\other_content" /> 
    </application> 
</site> 

Ve IIS yöneticisinde:

alt text

dönüştürme Mevcut Çocuk Klasör Bir Uygulamaya:

Application app = 
    site.Applications.Add("/vdir_1/sub_dir1/app_2", @"d:\mysite\other_content"); 
app.ApplicationPoolName = "MySite"; 
serverManager.CommitChanges(); 

çıkan yapılandırma benziyor Gibi Son bir örnek, biz bir uygulamaya /other_apps/sub_app_1 açmak istiyorum:

alt text

Bizim kod benziyor:

Application app = 
    site.Applications.Add("/other_apps/sub_app_1", @"d:\mysite\other_content"); 
app.ApplicationPoolName="MySite"; 
serverManager.CommitChanges(); 

çıkan yapılandırma:

<site name="MySite" id="3"> 
    <application path="/" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="D:\MySite\www" /> 
    <virtualDirectory path="/vdir_1" physicalPath="D:\MySite\other_content" /> 
    <virtualDirectory path="/vdir_1/sub_dir1" physicalPath="D:\MySite\more_content" /> 
    <virtualDirectory path="/vdir_2/sub_dir1" physicalPath="D:\MySite\even_more_content" /> 
    </application> 
    <application path="/app_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\MySite\www\app_1" /> 
    </application> 
    <application path="/app_1/vdir_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\MySite\other_content" /> 
    </application> 
    <application path="/vdir_1/sub_dir1/app_2" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\mysite\other_content" /> 
    </application> 
    <application path="/other_apps/sub_app_1" applicationPool="MySite"> 
    <virtualDirectory path="/" physicalPath="d:\mysite\other_content" /> 
    </application> 
</site> 

IIS yöneticisinde:

alt text

Bu, siteler, uygulamalar ve sanal dizinler arasındaki ilişkiyi açıklamaya yardımcı olur.

+6

Harika cevap Kev. +1 –

+0

@mike - şerefe Mike. :) – Kev

+0

Harika, teşekkürler @Kev. Uygulamaya Dönüştür komutları altında, yükleyicilerimden biri, normal bir dizin yerine VDir olarak alt dizini oluşturuyordu, bu yüzden bu kodu bir uygulamaya çevirmek için kullandığımda bir "dizin zaten var" verdi. Çözüm, uygulama eklemeye başlamadan önce var olan VDir'i VirtualDirectories koleksiyonundan kaldırmak için yalnızca API'yi çağırdı. Küçük bir öğe, ancak talimatlarınız dahil edilmesine değer olabilir. –

İlgili konular