IIS ile ASP.NET Geliştirme Sunucusu Arasındaki Temel Farklılıklar (C#)

tarafından Scott Mitchell

PDF’yi İndir

Bir ASP.NET uygulamasını yerel olarak test ederken, büyük olasılıkla ASP.NET Geliştirme Web Sunucusu kullanıyorsunuz. Ancak, üretim web sitesi büyük olasılıkla iis tarafından desteklenir. Bu web sunucularının istekleri işleme şekli arasında bazı farklar vardır ve bu farklılıklar önemli sonuçlar doğurabilir. Bu öğreticide daha almanca farklılıklardan bazıları keşfedildi.

Giriş

Bir kullanıcı bir ASP.NET uygulamasını her ziyaretinde tarayıcısı web sitesine bir istek gönderir. Bu istek, istenen kaynağın içeriğini oluşturmak ve döndürmek için ASP.NET çalışma zamanıyla eşgüdüm sağlayan web sunucusu yazılımı tarafından alınır. I nternet I nformation S ervices (IIS), Windows sunucuları için yaygın İnternet tabanlı işlevler sağlayan bir hizmet paketidir. IIS, üretim ortamlarındaki ASP.NET uygulamaları için en yaygın kullanılan web sunucusudur; büyük olasılıkla web barındırma sağlayıcınız tarafından ASP.NET uygulamanıza hizmet vermek için kullanılan web sunucusu yazılımıdır. IIS, geliştirme ortamında web sunucusu yazılımı olarak da kullanılabilir, ancak bu, IIS'nin yüklenmesini ve düzgün yapılandırılmasını gerektirir.

ASP.NET Geliştirme Sunucusu, geliştirme ortamı için alternatif bir web sunucusu seçeneğidir; ile birlikte sağlanır ve Visual Studio ile tümleştirilir. Web uygulaması IIS kullanacak şekilde yapılandırılmadığı sürece, ASP.NET Geliştirme Sunucusu otomatik olarak başlatılır ve Visual Studio'nun içinden bir web sayfasını ilk kez ziyaret oluşturduğunuzda web sunucusu olarak kullanılır. Hangi Dosyaların Dağıtılması Gerektiğini Belirleme öğreticisinde oluşturduğumuz tanıtım web uygulamaları, IIS kullanacak şekilde yapılandırılmamış dosya sistemi tabanlı web uygulamalarıydı. Bu nedenle, Visual Studio'nun içinden bu web sitelerinden birini ziyaret ederken ASP.NET Geliştirme Sunucusu kullanılır.

Mükemmel bir dünyada geliştirme ve üretim ortamları aynı olacaktır. Ancak, önceki öğreticide ele aldığımız gibi, ortamların farklı yapılandırma ayarlarına sahip olması yaygın bir durum değildir. Ortamlarda farklı web sunucusu yazılımları kullanmak, bir uygulamayı dağıtırken dikkate alınması gereken başka bir değişken ekler. Bu öğretici, IIS ile ASP.NET Geliştirme Sunucusu arasındaki temel farkları kapsar. Bu farklılıklar nedeniyle, geliştirme ortamında kusursuz bir şekilde çalışan kodun bir özel durum oluşturduğu veya üretimde yürütürken farklı davrandığı senaryolar vardır.

Güvenlik Bağlamı Farklılıkları

Web sunucusu yazılımı gelen bir isteği işlediğinde bu isteği belirli bir güvenlik bağlamıyla ilişkilendirir. Bu güvenlik bağlamı bilgileri, işletim sistemi tarafından istek tarafından izin verilen eylemleri belirlemek için kullanılır. Örneğin, bir ASP.NET sayfası, disk üzerindeki bir dosyaya ileti kaydeden kod içerebilir. Bu ASP.NET sayfasının hatasız yürütülmesi için, güvenlik bağlamı uygun dosya sistemi düzeyinde izinlere sahip olmalıdır ve bu dosyada yazma izinlerine sahip olmalıdır.

ASP.NET Geliştirme Sunucusu, gelen istekleri o anda oturum açmış olan kullanıcının güvenlik bağlamıyla ilişkilendirir. Masaüstünüzde yönetici olarak oturum açtıysanız, ASP.NET Geliştirme Sunucusu tarafından sunulan ASP.NET sayfaları yöneticiyle aynı erişim haklarına sahip olur. Ancak IIS tarafından işlenen ASP.NET istekleri belirli bir makine hesabıyla ilişkilendirilir. Varsayılan olarak, Web barındırma sağlayıcınız her müşteri için benzersiz bir hesap yapılandırmış olsa da, Ağ Hizmeti makine hesabı IIS sürüm 6 ve 7 tarafından kullanılır. Dahası, web barındırma sağlayıcınız büyük olasılıkla bu makine hesabına sınırlı izinler vermiş olabilir. Net sonuç, geliştirme ortamında hatasız yürütülen ancak üretim ortamında barındırıldığında yetkilendirmeyle ilgili özel durumlar oluşturan web sayfalarınız olmasıdır.

Bu tür bir hatayı uygulamada göstermek için Kitap İncelemeleri web sitesinde, birinin 24 Saat içinde 3.5 ASP.NET 3.5'i görüntülemiş olduğu en son tarihi ve saati depolayan bir disk dosyası oluşturan bir sayfa oluşturdum. Birlikte ilerlemek için sayfayı ~/Tech/TYASP35.aspx açın ve olay işleyicisine Page_Load aşağıdaki kodu ekleyin:

protected void  Page_Load(object sender, EventArgs e)

{

    string filePath =  Server.MapPath("~/LastTYASP35Access.txt");

    string contents =  string.Format("Last accessed on {0} by {1}",

        DateTime.Now.ToString(), Request.UserHostAddress);

    System.IO.File.WriteAllText(filePath,  contents);

}

Not

File.WriteAllText yöntemi yoksa yeni bir dosya oluşturur ve belirtilen içeriği bu dosyaya yazar. Dosya zaten varsa, var olan içeriğin üzerine yazılır.

Ardından, ASP.NET Geliştirme Sunucusu'nu kullanarak geliştirme ortamındaki 24 Saatte 3.5 ASP.NET Kendinizi Öğretin kitap inceleme sayfasını ziyaret edin. Web uygulamasının kök dizininde metin dosyası oluşturmak ve değiştirmek için yeterli izinlere sahip bir hesapla bilgisayarınızda oturum açtığınız varsayıldığında kitap incelemesi öncekiyle aynı görünür, ancak sayfa her ziyaretinde tarih ve saat ile kullanıcının IP adresi dosyada LastTYASP35Access.txt depolanır. Tarayıcınızı bu dosyaya işaret edin; Şekil 1'de gösterilene benzer bir ileti görmeniz gerekir.

Metin Dosyası, Kitap İncelemesinin Ziyaret Edildiği Son Tarihi ve Saati içerir

Şekil 1: Metin Dosyası Kitap İncelemesinin Ziyaret Edildiği Son Tarihi ve Saati içerir (Tam boyutlu resmi görüntülemek için tıklayın)

Web uygulamasını üretim ortamına dağıtın ve ardından barındırılan 24 Saatte Kendinize 3.5 ASP.NET Öğretin kitap inceleme sayfasını ziyaret edin. Bu noktada kitap gözden geçirme sayfasını normal şekilde veya Şekil 2'de gösterilen hata iletisini görmeniz gerekir. Bazı web barındırma sağlayıcıları anonim ASP.NET makine hesabına yazma izinleri verir; bu durumda sayfa hatasız çalışır. Ancak, web barındırma sağlayıcınız anonim hesap için yazma erişimini yasaklarsa, sayfa geçerli tarih ve saati LastTYASP35Access.txt dosyaya yazmaya çalıştığında TYASP35.aspx bir UnauthorizedAccessException özel durum oluşur.

IIS Tarafından Kullanılan Varsayılan Makine Hesabının Dosya Sistemine Yazma İzinleri Yok

Şekil 2: IIS Tarafından Kullanılan Varsayılan Makine Hesabının Dosya Sistemine Yazma İzinleri Yok (Tam boyutlu görüntüyü görüntülemek için tıklayın)

İyi haber, çoğu web barındırma sağlayıcısının web sitenizde dosya sistemi izinlerini belirtmenize olanak tanıyan bir tür izin aracı olmasıdır. Anonim ASP.NET hesabına kök dizine yazma erişimi verin ve kitap gözden geçirme sayfasını yeniden ziyaret edin. (Gerekirse, varsayılan ASP.NET hesabına yazma izinleri verme konusunda yardım için web barındırma sağlayıcınıza başvurun.) Bu kez sayfa hatasız yüklenmelidir ve LastTYASP35Access.txt dosya başarıyla oluşturulmalıdır.

Burada yapmanız gereken, ASP.NET Geliştirme Sunucusu IIS'den farklı bir güvenlik bağlamı altında çalıştığından, dosya sistemini okuyan veya yazan, Windows Olay Günlüğü'nden veya Windows kayıt defterine okuyan veya yazan ASP.NET sayfalarınızın geliştirmede beklendiği gibi çalışması ancak üretim sırasında özel durumlar oluşturması mümkündür. Paylaşılan bir web barındırma ortamına dağıtılacak bir web uygulaması oluştururken, Olay Günlüğü'nü veya Windows kayıt defterini okumayın veya yazmayın. Ayrıca, üretim ortamında uygun klasörlerde okuma ve yazma ayrıcalıkları vermeniz gerekebileceği için dosya sisteminden okuyan veya dosya sistemine yazan tüm ASP.NET sayfalarını da not alın.

Statik içerik sunmayla ilgili farklar

IIS ile ASP.NET Geliştirme Sunucusu arasındaki bir diğer temel fark, statik içerik isteklerini işleme şeklidir. ASP.NET sayfası, görüntüsü veya JavaScript dosyası için ASP.NET Geliştirme Sunucusu'na gelen her istek ASP.NET çalışma zamanı tarafından işlenir. Varsayılan olarak IIS, ASP.NET çalışma zamanını yalnızca ASP.NET web sayfası, Web Hizmeti vb. ASP.NET bir kaynak için istek geldiğinde çağırır. Statik içerik istekleri (görüntüler, CSS dosyaları, JavaScript dosyaları, PDF dosyaları, ZIP dosyaları ve benzeri) iis tarafından ASP.NET çalışma zamanının katılımı olmadan alınır. (IIS'ye statik içerik sunarken ASP.NET çalışma zamanıyla çalışmasını bildirmek mümkündür; daha fazla bilgi için bu öğreticideki "IIS 7 ile Statik Dosyalarda Forms-Based Kimlik Doğrulaması ve URL Kimlik Doğrulaması Gerçekleştirme" bölümüne bakın.)

ASP.NET çalışma zamanı, istenen içeriği oluşturmak için kimlik doğrulaması (istek sahibini tanımlama) ve yetkilendirme (istek sahibinin istenen içeriği görüntüleme izni olup olmadığını belirleme) dahil olmak üzere bir dizi adım gerçekleştirir. Popüler bir kimlik doğrulama biçimi, bir kullanıcının kimlik bilgilerini (genellikle kullanıcı adı ve parola) bir web sayfasındaki metin kutularına girerek tanımlandığı form tabanlı kimlik doğrulamasıdır. Kimlik bilgileri doğrulandıktan sonra, web sitesi kullanıcının tarayıcısında bir kimlik doğrulama bileti tanımlama bilgisi depolar. Bu çerez, web sitesine gönderilen her istekle birlikte gönderilir ve kullanıcının kimliğini doğrulamak için kullanılır. Ayrıca, kullanıcıların belirli bir klasöre erişebileceklerini veya erişemeyeceklerini belirten URL yetkilendirme kuralları belirtmek de mümkündür. Birçok ASP.NET web sitesi, kullanıcı hesaplarını desteklemek ve sitenin yalnızca kimliği doğrulanmış kullanıcılar veya belirli bir role ait kullanıcılar tarafından erişilebilen bölümlerini tanımlamak için form tabanlı kimlik doğrulaması ve URL yetkilendirmesi kullanır.

Not

ASP'nin kapsamlı bir incelemesi için. NET'in form tabanlı kimlik doğrulaması, URL yetkilendirmesi ve kullanıcı hesabıyla ilgili diğer özellikleri , Web Sitesi Güvenliği Öğreticileri'ne göz atmayı unutmayın.

Form tabanlı yetkilendirme kullanan kullanıcı hesaplarını destekleyen ve URL yetkilendirmesi kullanılarak yalnızca kimliği doğrulanmış kullanıcılara izin verecek şekilde yapılandırılmış bir klasörü olan bir web sitesi düşünün. Bu klasörün ASP.NET sayfalar ve PDF dosyaları içerdiğini ve amacın yalnızca kimliği doğrulanmış kullanıcıların bu PDF dosyalarını görüntüleyebildiğini düşünün.

Bir ziyaretçi, URL'yi doğrudan tarayıcının Adres çubuğuna girerek bu PDF dosyalarından birini görüntülemeye çalışırsa ne olur? Bunu öğrenmek için Kitap İncelemeleri sitesinde yeni bir klasör oluşturalım, bazı PDF dosyaları ekleyelim ve anonim kullanıcıların bu klasörü ziyaret etmelerini yasaklayan URL yetkilendirmesini kullanacak şekilde siteyi yapılandıralım. Tanıtım uygulamasını indirirseniz, PrivateDocsWeb Sitesi Güvenliği Öğreticilerim (ne kadar uygun!) adlı bir klasör oluşturduğumu ve PDF eklediğini görürsünüz. Klasör, PrivateDocs anonim kullanıcıları reddetmek için URL yetkilendirme kurallarını belirten bir Web.config dosya da içerir:

<?xml version="1.0"?>
<?xml version="1.0"?>

<configuration>

    <system.web>

         <authorization>

            <deny  users="?" />

         </authorization>

     </system.web>

</configuration>

Son olarak, kök dizindeki dosyayı güncelleştirerek Web.config şunu değiştirerek web uygulamasını form tabanlı kimlik doğrulaması kullanacak şekilde yapılandırdım:

<authentication mode="Windows" />

Şununla:

<authentication mode="Forms" />

ASP.NET Geliştirme Sunucusu'nu kullanarak siteyi ziyaret edin ve tarayıcınızın Adres çubuğuna PDF dosyalarından birinin doğrudan URL'sini girin. Bu öğreticiyle ilişkili web sitesini indirdiyseniz URL şuna benzer olmalıdır: http://localhost:portNumber/PrivateDocs/aspnet_tutorial01_Basics_vb.pdf

Bu URL'nin Adres çubuğuna girilmesi, tarayıcının dosya için ASP.NET Geliştirme Sunucusu'na istek göndermesine neden olur. ASP.NET Geliştirme Sunucusu, isteği işlenmek üzere ASP.NET çalışma zamanına bırakır. Henüz oturum açmadığımız için ve Web.config klasöründeki PrivateDocs anonim erişimi reddedecek şekilde yapılandırıldığından, ASP.NET çalışma zamanı bizi otomatik olarak oturum açma sayfasına Login.aspx yönlendirir (bkz. Şekil 3). Kullanıcıyı oturum açma sayfasına yönlendirirken, ASP.NET kullanıcının görüntülemeye çalıştığı sayfayı gösteren bir ReturnUrl querystring parametresi içerir. Kullanıcı başarıyla oturum açtıktan sonra bu sayfaya döndürülebilir.

Yetkisiz Kullanıcılar Otomatik Olarak Oturum Açma Sayfasına Yönlendirilir

Şekil 3: Yetkisiz Kullanıcılar Otomatik Olarak Oturum Açma Sayfasına Yönlendirilir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Şimdi bunun üretimde nasıl davrandığını görelim. Uygulamanızı dağıtın ve üretimdeki klasördeki PDF'lerden birinin doğrudan URL'sini PrivateDocs girin. Bu, tarayıcınızdan dosya için bir istek IIS'i göndermesini ister. Statik bir dosya istendiğinden IIS, ASP.NET çalışma zamanını çağırmadan dosyayı alır ve döndürür. Sonuç olarak, URL yetkilendirme denetimi gerçekleştirilmemişti; sözde özel PDF'nin içeriğine, dosyanın doğrudan URL'sini bilen herkes erişebilir.

Anonim Kullanıcılar Dosyanın Doğrudan URL'sini girerek Özel PDF Dosyalarını indirebilir

Şekil 4: Anonim Kullanıcılar Dosyanın Doğrudan URL'sini Girerek Özel PDF Dosyalarını indirebilir (tam boyutlu görüntüyü görüntülemek için tıklayın)

IIS 7 ile Statik Dosyalarda Forms-Based Kimlik Doğrulaması ve URL Kimlik Doğrulaması Gerçekleştirme

Statik içeriği yetkisiz kullanıcılardan korumak için kullanabileceğiniz birkaç teknik vardır. IIS 7, IIS'nin iş akışını ASP.NET çalışma zamanının iş akışıyla ilişkilendiren tümleşik işlem hattını kullanıma sunar. Özetle IIS'ye ASP.NET çalışma zamanının kimlik doğrulama ve yetkilendirme modüllerini tüm gelen istekleri (PDF dosyaları gibi statik içerik dahil) çağırmasını bildirebilirsiniz. Web sitenizi tümleşik işlem hattını kullanacak şekilde yapılandırmayı öğrenmek için web barındırma sağlayıcınıza başvurun.

IIS tümleşik işlem hattını kullanacak şekilde yapılandırıldıktan sonra kök dizindeki dosyaya Web.config aşağıdaki işaretlemeyi ekleyin:

<system.webServer>

      <modules>

          <add  name="FormsAuthenticationModule"  type="System.Web.Security.FormsAuthenticationModule" />

          <remove  name="UrlAuthorization" />

          <add  name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"  />

          <remove  name="DefaultAuthentication" />

          <add  name="DefaultAuthentication"  type="System.Web.Security.DefaultAuthenticationModule" />

      </modules>

</system.webServer>

Bu işaretleme IIS 7'ye ASP.NET tabanlı kimlik doğrulama ve yetkilendirme modüllerini kullanmasını emreder. Uygulamanızı yeniden dağıtın ve ardından PDF dosyasını yeniden ziyaret edin. IIS bu kez isteği işlediğinde, ASP.NET çalışma zamanının kimlik doğrulama ve yetkilendirme mantığına isteği inceleme fırsatı verir. Yalnızca kimliği doğrulanmış kullanıcılar klasördeki PrivateDocs içeriği görüntüleme yetkisine sahip olduğundan anonim ziyaretçi otomatik olarak oturum açma sayfasına yönlendirilir (Şekil 3'e geri bakın).

Not

Web barındırma sağlayıcınız hala IIS 6 kullanıyorsa tümleşik işlem hattı özelliğini kullanamazsınız. Geçici çözümlerden biri, özel belgelerinizi HTTP erişimini yasaklayan bir klasöre (örneğin App_Data) koymak ve sonra bu belgeleri sunmak için bir sayfa oluşturmaktır. Bu sayfa olarak adlandırılabilir GetPDF.aspxve bir querystring parametresi aracılığıyla PDF'nin adı geçirilir. Sayfa GetPDF.aspx önce kullanıcının dosyayı görüntüleme izni olduğunu doğrular ve varsa, istenen PDF dosyasının içeriğini istekte bulunan istemciye geri göndermek için yöntemini kullanır Response.WriteFile(filePath) . Bu teknik, tümleşik işlem hattını etkinleştirmek istemiyorsanız IIS 7 için de kullanılabilir.

Özet

Üretim ortamındaki web uygulamaları Microsoft'un IIS web sunucusu yazılımı kullanılarak barındırılır. Ancak geliştirme ortamında uygulama IIS veya ASP.NET Geliştirme Sunucusu kullanılarak barındırılabilir. İdeal olan, aynı web sunucusu yazılımının her iki ortamda da kullanılmasıdır, çünkü farklı yazılım kullanılması karmaya başka bir değişken ekler. Ancak ASP.NET Geliştirme Sunucusu'nun kullanım kolaylığı, geliştirme ortamında cazip bir seçim olmasını sağlar. İyi haber, IIS ile ASP.NET Geliştirme Sunucusu arasında yalnızca birkaç temel fark olmasıdır ve bu farklılıkların farkındaysanız, uygulamanın ortamdan bağımsız olarak aynı şekilde çalıştığından ve çalıştığından emin olmanıza yardımcı olacak adımlar atabilirsiniz.

Mutlu Programlama!

Daha Fazla Bilgi

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: