ASP.NET MVC’yi Farklı IIS Sürümleriyle Kullanma (VB)

Microsoft tarafından

Bu öğreticide, ASP.NET MVC ve URL Yönlendirme'yi Internet Information Services'in farklı sürümleriyle kullanmayı öğreneceksiniz. ASP.NET MVC'yi IIS 7.0 (klasik mod), IIS 6.0 ve IIS'nin önceki sürümleriyle kullanmaya yönelik farklı stratejiler öğrenirsiniz.

ASP.NET MVC çerçevesi, tarayıcı isteklerini denetleyici eylemlerine yönlendirmek için ASP.NET Yönlendirme'ye bağlıdır. ASP.NET Yönlendirme'nin avantajlarından yararlanmak için web sunucunuzda ek yapılandırma adımları gerçekleştirmeniz gerekebilir. Her şey Internet Information Services (IIS) sürümüne ve uygulamanızın istek işleme moduna bağlıdır.

Iis'nin farklı sürümlerinin özeti aşağıdadır:

  • IIS 7.0 (tümleşik mod) - ASP.NET Yönlendirme'yi kullanmak için özel bir yapılandırma gerekmez.
  • IIS 7.0 (klasik mod) - ASP.NET Yönlendirme'yi kullanmak için özel yapılandırma gerçekleştirmeniz gerekir.
  • IIS 6.0 veya altı - ASP.NET Yönlendirme'yi kullanmak için özel yapılandırma gerçekleştirmeniz gerekir.

IIS'nin en son sürümü 7.5 sürümüdür (Win7'de). IIS'nin IIS 7'sinde Windows Server 2008 VE VISTA/SP1 ve üzeri bulunur. Home Basic dışında Vista işletim sisteminin herhangi bir sürümüne IIS 7.0'ı da yükleyebilirsiniz (bkz https://technet.microsoft.com/library/cc731179%28WS.10%29.aspx. ).

IIS 7.0, istekleri işlemek için iki modu destekler. Tümleşik modu veya klasik modu kullanabilirsiniz. Tümleşik modda IIS 7.0 kullanırken özel yapılandırma adımları gerçekleştirmeniz gerekmez. Ancak, klasik modda IIS 7.0 kullanırken ek yapılandırma gerçekleştirmeniz gerekir.

Microsoft Windows Server 2003, IIS 6.0 içerir. Windows Server 2003 işletim sistemini kullanırken IIS 6.0'ı IIS 7.0'a yükseltemezsiniz. IIS 6.0 kullanırken ek yapılandırma adımları gerçekleştirmeniz gerekir.

Microsoft Windows XP Professional, IIS 5.1'i içerir. IIS 5.1 kullanırken ek yapılandırma adımları gerçekleştirmeniz gerekir.

Son olarak, Microsoft Windows 2000 ve Microsoft Windows 2000 Professional, IIS 5.0'ı içerir. IIS 5.0 kullanırken ek yapılandırma adımları gerçekleştirmeniz gerekir.

Tümleşik ve Klasik Mod

IIS 7.0, iki farklı istek işleme modu kullanarak istekleri işleyebilir: tümleşik ve klasik. Tümleşik mod daha iyi performans ve daha fazla özellik sağlar. Klasik mod, IIS'nin önceki sürümleriyle geriye dönük uyumluluk için dahil edilir.

İstek işleme modu uygulama havuzu tarafından belirlenir. Uygulamayla ilişkili uygulama havuzunu belirleyerek belirli bir web uygulaması tarafından hangi işleme modunun kullanıldığını belirleyebilirsiniz. Şu adımları izleyin:

  1. Internet Information Services Yöneticisi'ni başlatma
  2. Bağlantılar penceresinde bir uygulama seçin
  3. Eylemler penceresinde Temel Ayarlar bağlantısına tıklayarak Uygulamayı Düzenle iletişim kutusunu açın (bkz. Şekil 1)
  4. Seçilen Uygulama havuzunu not edin.

Varsayılan olarak, IIS iki uygulama havuzunu destekleyecek şekilde yapılandırılmıştır: DefaultAppPool ve Klasik .NET AppPool. DefaultAppPool seçiliyse uygulamanız tümleşik istek işleme modunda çalışıyor demektir. Klasik .NET AppPool seçiliyse, uygulamanız klasik istek işleme modunda çalışıyordur.

IIS'nin uygulamayı tümleşik istek işleme modunda çalıştıracak şekilde yapılandırıldığını gösteren Uygulamayı Düzenle iletişim kutusunun ekran görüntüsü.

Şekil 1: İstek işleme modunu algılama (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Uygulamayı Düzenle iletişim kutusunda istek işleme modunu değiştirebileceğinize dikkat edin. Seç düğmesine tıklayın ve uygulamayla ilişkili uygulama havuzunu değiştirin. Bir ASP.NET uygulamasını klasikten tümleşik moda değiştirirken uyumluluk sorunları olduğunu fark edin. Daha fazla bilgi için aşağıdaki makaleleri inceleyin:

ASP.NET bir uygulama DefaultAppPool kullanıyorsa, ASP.NET Yönlendirme'yi (ve dolayısıyla MVC'yi ASP.NET) kullanmak için ek adımlar gerçekleştirmeniz gerekmez. Ancak, ASP.NET uygulaması Klasik .NET AppPool kullanacak şekilde yapılandırılmışsa okumaya devam ederseniz, yapacak daha fazla işiniz vardır.

ASP.NET MVC'sini IIS'nin Eski Sürümleriyle Kullanma

ASP.NET MVC'yi IIS 7.0'dan eski bir IIS sürümüyle kullanmanız veya IIS 7.0'ı klasik modda kullanmanız gerekiyorsa, iki seçeneğiniz vardır. İlk olarak, yol tablosunu dosya uzantılarını kullanacak şekilde değiştirebilirsiniz. Örneğin, /Store/Details gibi bir URL istemek yerine /Store.aspx/Details gibi bir URL isteyebilirsiniz.

İkinci seçenek, joker karakter betik eşlemesi olarak adlandırılan bir şey oluşturmaktır. Joker karakter betik eşlemesi, her isteği ASP.NET çerçevesine eşlemenizi sağlar.

Web sunucunuza erişiminiz yoksa (örneğin, ASP.NET MVC uygulamanız bir İnternet Servis Sağlayıcısı tarafından barındırılıyorsa) ilk seçeneği kullanmanız gerekir. URL'lerinizin görünümünü değiştirmek istemiyorsanız ve web sunucunuza erişiminiz varsa, ikinci seçeneği kullanabilirsiniz.

Aşağıdaki bölümlerde her seçeneği ayrıntılı olarak inceleyeceğiz.

Rota Tablosuna Uzantı Ekleme

ASP.NET Yönlendirme'yi IIS'nin eski sürümleriyle çalışacak şekilde almanın en kolay yolu, Global.asax dosyasındaki yol tablonuzu değiştirmektir. Liste 1'deki varsayılan ve değiştirilmemiş Global.asax dosyası, Varsayılan yol adlı bir yol yapılandırıyor.

Listeleme 1 - Global.asax (değiştirilmemiş)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

Liste 1'de yapılandırılan Varsayılan yol, aşağıdakine benzer URL'leri yönlendirmenizi sağlar:

/Home/Index

/Ürün/Ayrıntılar/3

/Ürün

Ne yazık ki IIS'nin eski sürümleri bu istekleri ASP.NET çerçevesine geçirmez. Bu nedenle, bu istekler bir denetleyiciye yönlendirilmeyen. Örneğin, /Home/Index URL'si için bir tarayıcı isteğinde bulunursanız Şekil 2'deki hata sayfasını alırsınız.

404 Bulunamadı hatasını gösteren Microsoft Internet Explorer penceresinin ekran görüntüsü.

Şekil 2: 404 Bulunamadı hatası alma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

IIS'nin eski sürümleri yalnızca belirli istekleri ASP.NET çerçevesine eşler. İstek, doğru dosya uzantısına sahip bir URL için olmalıdır. Örneğin, /SomePage.aspx isteği ASP.NET çerçevesiyle eşlenir. Ancak, /SomePage.htm isteğinde bulunulamıyor.

Bu nedenle, ASP.NET Yönlendirme'nin çalışmasını sağlamak için Varsayılan yolu değiştirerek ASP.NET çerçevesine eşlenmiş bir dosya uzantısı içermesini sağlamamız gerekir.

Bu, adlı registermvc.wsfbir betik kullanılarak yapılır. sürümündeki ASP.NET MVC 1 sürümüne C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scriptsdahil edilmiştir ancak ASP.NET 2 sürümünden itibaren bu betik ASP.NET Vadeli İşlemler'e taşınmıştır.

Bu betiğin yürütülmesi IIS'ye yeni bir .mvc uzantısı kaydeder. .mvc uzantısını kaydettikten sonra, Global.asax dosyasındaki yollarınızı değiştirerek yolların .mvc uzantısını kullanmasını sağlayabilirsiniz.

Liste 2'de değiştirilen Global.asax dosyası IIS'nin eski sürümleriyle çalışır.

Listeleme 2 - Global.asax (uzantılarla değiştirildi)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}.mvc/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

            routes.MapRoute( _

                "Root", _

                "", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

Önemli: Global.asax dosyasını değiştirdikten sonra ASP.NET MVC Uygulamanızı yeniden oluşturmayı unutmayın.

Liste 2'de Global.asax dosyasında iki önemli değişiklik vardır. Artık Global.asax içinde tanımlanmış iki yol vardır. İlk yol olan Varsayılan yol için URL deseni şu şekilde görünür:

{controller}.mvc/{action}/{id}

.mvc uzantısının eklenmesi, ASP.NET Yönlendirme modülünün kestiği dosyaların türünü değiştirir. Bu değişiklikle ASP.NET MVC uygulaması artık aşağıdaki gibi istekleri yönlendirir:

/Home.mvc/Index/

/Product.mvc/Details/3

/Product.mvc/

İkinci yol olan Kök yol yenidir. Kök yolu için bu URL deseni boş bir dizedir. Bu yol, uygulamanızın kökünde yapılan istekleri eşleştirmek için gereklidir. Örneğin, Kök yol şuna benzer bir istekle eşleşecektir:

http://www.YourApplication.com/

Yönlendirme tablonuzda bu değişiklikleri yaptıktan sonra, uygulamanızdaki tüm bağlantıların bu yeni URL desenleriyle uyumlu olduğundan emin olmanız gerekir. Başka bir deyişle, tüm bağlantılarınızın .mvc uzantısını içerdiğinden emin olun. Bağlantılarınızı oluşturmak için Html.ActionLink() yardımcı yöntemini kullanıyorsanız herhangi bir değişiklik yapmanız gerekmez.

registermvc.wcf betiğini kullanmak yerine, IIS'ye el ile ASP.NET çerçevesine eşlenmiş yeni bir uzantı ekleyebilirsiniz. Kendiniz yeni bir uzantı eklerken, Dosyanın var olduğunu doğrula etiketli onay kutusunun işaretli olmadığından emin olun.

Barındırılan Sunucu

Web sunucunuza her zaman erişiminiz yoktur. Örneğin, ASP.NET MVC uygulamanızı bir İnternet Barındırma Sağlayıcısı kullanarak barındırıyorsanız IIS erişiminiz olması gerekmez.

Bu durumda, ASP.NET çerçevesine eşlenen mevcut dosya uzantılarından birini kullanmanız gerekir. ASP.NET eşlenen dosya uzantılarına örnek olarak .aspx, .axd ve .ashx uzantıları verilebilir.

Örneğin, Listeleme 3'teki değiştirilmiş Global.asax dosyası .mvc uzantısı yerine .aspx uzantısını kullanır.

Listeleme 3 - Global.asax (.aspx uzantılarıyla değiştirildi)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}.aspx/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

            routes.MapRoute( _

                "Root", _

                "", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

Listeleme 3'teki Global.asax dosyası, .mvc uzantısı yerine .aspx uzantısını kullanması dışında önceki Global.asax dosyasıyla tamamen aynıdır. .aspx uzantısını kullanmak için uzak web sunucunuzda herhangi bir kurulum yapmanız gerekmez.

Joker Karakter Betik Eşlemesi Oluşturma

ASP.NET MVC uygulamanızın URL'lerini değiştirmek istemiyorsanız ve web sunucunuza erişiminiz varsa ek bir seçeneğiniz vardır. Tüm istekleri web sunucusuna ASP.NET çerçevesine eşleyen bir joker karakter betik eşlemesi oluşturabilirsiniz. Bu şekilde, VARSAYıLAN ASP.NET MVC yol tablosunu IIS 7.0 (klasik modda) veya IIS 6.0 ile kullanabilirsiniz.

Bu seçeneğin IIS'nin web sunucusunda yapılan her isteği kesmesine neden olduğunu unutmayın. Buna görüntüler, klasik ASP sayfaları ve HTML sayfaları için istekler dahildir. Bu nedenle, ASP.NET joker karakter betik eşlemesinin etkinleştirilmesi performansı etkiler.

IIS 7.0 için joker karakter betik eşlemesini şu şekilde etkinleştirebilirsiniz:

  1. Bağlantılar penceresinde uygulamanızı seçin
  2. Özellikler görünümünün seçili olduğundan emin olun
  3. İşleyici Eşlemeleri düğmesine çift tıklayın
  4. Joker Karakter Betik Eşlemesi Ekle bağlantısına tıklayın (bkz. Şekil 3)
  5. aspnet_isapi.dll dosyasının yolunu girin (Bu yolu PageHandlerFactory betik eşlemesinden kopyalayabilirsiniz)
  6. MVC adını girin
  7. Tamam düğmesine tıklayın

Joker Karakter Betik Eşlemesi Ekle iletişim kutusunu gösteren Internet Information Services Manager 7 nokta 0 penceresinin ekran görüntüsü.

Şekil 3: IIS 7.0 ile joker karakter betik eşlemesi oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

IIS 6.0 ile joker karakter betik eşlemesi oluşturmak için şu adımları izleyin:

  1. Bir web sitesine sağ tıklayın ve Özellikler'i seçin
  2. Giriş Dizini sekmesini seçin
  3. Yapılandırma düğmesine tıklayın
  4. Eşlemeler sekmesini seçin
  5. Ekle düğmesine tıklayın (bkz. Şekil 4)
  6. aspnet_isapi.dll yolunu Yürütülebilir alana yapıştırın (bu yolu .aspx dosyalarının betik eşlemesinden kopyalayabilirsiniz)
  7. Dosyanın var olduğunu doğrulayın etiketli onay kutusunun işaretini kaldırın
  8. Tamam düğmesine tıklayın

Eğik çizgi Ekle Uygulama Uzantısı Eşlemesini Düzenle iletişim kutusunu gösteren Internet Information Services 6 nokta 0 penceresinin ekran görüntüsü.

Şekil 4: IIS 6.0 ile joker karakter betik eşlemesi oluşturma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Joker karakter betik eşlemelerini etkinleştirdikten sonra Global.asax dosyasındaki yol tablosunu kök yol içerecek şekilde değiştirmeniz gerekir. Aksi takdirde, uygulamanızın kök sayfası için istekte bulunurken Şekil 5'teki hata sayfasını alırsınız. Liste 4'te değiştirilmiş Global.asax dosyasını kullanabilirsiniz.

Eksik Kök yol hatasını gösteren Microsoft Internet Explorer penceresinin ekran görüntüsü: Gelen istek hiçbir yol ile eşleşmiyor.

Şekil 5: Eksik Kök yol hatası (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Listeleme 4 - Global.asax (Kök yol ile değiştirildi)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

            routes.MapRoute( _

                "Root", _

                "", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

IIS 7.0 veya IIS 6.0 için joker karakter betik eşlemesini etkinleştirdikten sonra, aşağıdakine benzer varsayılan yol tablosuyla çalışan istekler yapabilirsiniz:

/

/Home/Index

/Ürün/Ayrıntılar/3

/Ürün

Özet

Bu öğreticinin amacı, eski bir IIS sürümünü (veya klasik modda IIS 7.0) kullanırken ASP.NET MVC'yi nasıl kullanabileceğinizi açıklamaktı. ASP.NET Yönlendirme'yi IIS'nin eski sürümleriyle çalışacak şekilde almanın iki yöntemini ele aldık: Varsayılan yol tablosunu değiştirme veya joker karakter betik eşlemesi oluşturma.

İlk seçenek, ASP.NET MVC uygulamanızda kullanılan URL'leri değiştirmenizi gerektirir. Bu ilk seçeneğin çok önemli bir avantajı, yönlendirme tablosunu değiştirmek için bir web sunucusuna erişmeniz gerekmemesidir. Bu, ASP.NET MVC uygulamanızı bir İnternet barındırma şirketiyle barındırırken bile bu ilk seçeneği kullanabileceğiniz anlamına gelir.

İkinci seçenek, joker karakter betik eşlemesi oluşturmaktır. Bu ikinci seçeneğin avantajı, URL'lerinizi değiştirmenize gerek olmamasıdır. Bu ikinci seçeneğin dezavantajı, ASP.NET MVC uygulamanızın performansını etkileyebilecek olmasıdır.