Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Tom Dykstra
Bu öğretici serisi, Visual Studio 2012 veya Visual Studio 2010 kullanarak ASP.NET web uygulamasını Azure Uygulaması Service Web Apps'e veya üçüncü taraf barındırma sağlayıcısına dağıtmayı (yayımlamayı) gösterir. Seri hakkında bilgi için serinin ilk öğreticisine bakın.
Genel bakış
Bu öğreticide, Web.config dosyasını farklı hedef ortamlara dağıttığınızda değiştirme işlemini otomatikleştirme işlemi gösterilmektedir. Çoğu uygulamanın Web.config dosyasında, uygulama dağıtıldığında farklı olması gereken ayarları vardır. Bu değişiklikleri yapma işlemini otomatikleştirmek, her dağıttığınızda bunları el ile yapmak zorunda kalmanızı engeller; bu yorucu ve hataya açık olabilir.
Anımsatıcı: Bir hata iletisi alırsanız veya öğretici boyunca bir şey çalışmıyorsa sorun giderme sayfasını kontrol edin.
Web.config dönüştürmeleri ile Web Dağıtımı parametreleri karşılaştırması
Web.config dosya ayarlarını değiştirme işlemini otomatikleştirmenin iki yolu vardır: Web.config dönüştürmeleri ve Web Dağıtımı parametreleri. Web.config dönüştürme dosyası, dağıtıldığında Web.config dosyasının nasıl değiştirileceğini belirten XML işaretlemesi içerir. Belirli derleme yapılandırmaları ve belirli yayımlama profilleri için farklı değişiklikler belirtebilirsiniz. Varsayılan derleme yapılandırmaları Hata Ayıklama ve Yayın'dır ve özel derleme yapılandırmaları oluşturabilirsiniz. Yayımlama profili genellikle bir hedef ortama karşılık gelir. (Yayımlama profilleri hakkında daha fazla bilgi içinIis'ye Test Ortamı olarak dağıtma öğreticisi.)
Web Dağıtımı parametreleri, Web.config dosyalarında bulunan ayarlar da dahil olmak üzere dağıtım sırasında yapılandırılması gereken birçok farklı ayar türünü belirtmek için kullanılabilir. Web.config dosya değişikliklerini belirtmek için kullanıldığında, Web Dağıtımı parametrelerinin ayarlanması daha karmaşıktır, ancak dağıtana kadar ayarlanacak değeri bilmediğiniz durumlarda kullanışlıdır. Örneğin, kurumsal bir ortamda bir dağıtım paketi oluşturup üretimde yüklemesi için BT departmanındaki bir kişiye verebilirsiniz ve bu kişinin bilmediğiniz bağlantı dizesi veya parolaları girebilmesi gerekir.
Bu öğretici serisinin kapsadığı senaryo için, Web.config dosyasına yapılması gereken her şeyi önceden biliyorsunuz, bu nedenle Web Dağıtımı parametrelerini kullanmanız gerekmez. Kullanılan derleme yapılandırmasına bağlı olarak farklılık gösteren ve kullanılan yayımlama profiline bağlı olarak farklılık gösteren bazı dönüştürmeleri yapılandıracaksınız.
Azure'da Web.config ayarlarını belirtme
Değiştirmek istediğiniz Web.config dosyası ayarları veya <appSettings>
öğesindeyse <connectionStrings>
ve Azure Uygulaması Service'te Web Apps'e dağıtıyorsanız, dağıtım sırasında değişiklikleri otomatikleştirmek için başka bir seçeneğiniz vardır. Azure'da geçerlilik kazanmasını istediğiniz ayarları web uygulamanızın yönetim portalı sayfasının Yapılandır sekmesine girebilirsiniz (uygulama ayarları ve bağlantı dizesi bölümlerine kadar aşağı kaydırın). Projeyi dağıttığınızda, Azure değişiklikleri otomatik olarak uygular. Daha fazla bilgi için bkz . Windows Azure Web Siteleri: Uygulama Dizeleri ve Bağlantı Dizeleri Nasıl Çalışır?
Varsayılan dönüştürme dosyaları
Çözüm Gezgini'de Web.config'i genişleterek iki varsayılan derleme yapılandırması için varsayılan olarak oluşturulan Web.Debug.config ve Web.Release.config dönüştürme dosyalarını görüntüleyin.
Web.config dosyasına sağ tıklayıp bağlam menüsünden Yapılandırma Dönüşümleri Ekle'yi seçerek özel derleme yapılandırmaları için dönüştürme dosyaları oluşturabilirsiniz. Bu öğreticide bunu yapmanız gerekmez ve özel derleme yapılandırmaları oluşturmadığınız için menü seçeneği devre dışı bırakılır.
Daha sonra, her biri test, hazırlama ve üretim yayımlama profilleri için birer tane olacak şekilde üç dönüştürme dosyası daha oluşturacaksınız. Hedef ortama bağlı olduğundan yayımlama profili dönüştürme dosyasında işleyecek bir ayarın tipik bir örneği, test ve üretim için farklı olan bir WCF uç noktasıdır. Birlikte çalıştıkları yayımlama profillerini oluşturduktan sonra sonraki öğreticilerde yayımlama profili dönüştürme dosyaları oluşturacaksınız.
Hata ayıklama modunu devre dışı bırakma
Hedef ortam yerine derleme yapılandırmasına bağlı olan bir ayara örnek olarak özniteliği verilmiştir debug
. Yayın derlemesi için, dağıttığınız ortama bakılmaksızın genellikle hata ayıklamanın devre dışı bırakılmasını istersiniz. Bu nedenle, Visual Studio proje şablonları varsayılan olarak özniteliği öğesinden kaldıran debug
kodla Web.Release.config dönüştürme dosyaları oluşturur.compilation
Varsayılan Web.Release.config şu şekildedir: Açıklama satırı yapılan bazı örnek dönüştürme koduna ek olarak, özniteliğini kaldıran debug
öğesinde compilation
kod içerir:
<?xml version="1.0" encoding="utf-8"?>
<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<!--
In the example below, the "Replace" transform will replace the entire
<customErrors> section of your web.config file.
Note that because there is only one customErrors section under the
<system.web> node, there is no need to use the "xdt:Locator" attribute.
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
</configuration>
özniteliği, xdt:Transform="RemoveAttributes(debug)"
özniteliğinin debug
dağıtılan Web.config dosyasındaki öğesinden system.web/compilation
kaldırılmasını istediğinizi belirtir. Bu, bir Yayın derlemesi dağıttığınızda gerçekleştirilir.
Hata günlüğü erişimini yöneticilerle sınırlama
Uygulama çalışırken bir hata varsa, uygulama sistem tarafından oluşturulan hata sayfasının yerine genel bir hata sayfası görüntüler ve hata günlüğü ve raporlaması için Elmah NuGet paketini kullanır. customErrors
Application Web.config dosyasındaki öğesi hata sayfasını belirtir:
<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
<error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>
Hata sayfasını görmek için öğesinin mode
customErrors
özniteliğini geçici olarak "RemoteOnly" yerine "Açık" olarak değiştirin ve uygulamayı Visual Studio'dan çalıştırın. Studentsxxx.aspx gibi geçersiz bir URL isteyerek hataya neden olun. IIS tarafından oluşturulan "Kaynak bulunamıyor" hata sayfası yerine GenericErrorPage.aspx sayfasını görürsünüz.
Hata günlüğünü görmek için, bağlantı noktası numarasından sonra URL'deki her şeyi elmah.axd ile değiştirin (örneğin, http://localhost:51130/elmah.axd
) ve Enter tuşuna basın:
İşiniz bittiğinde öğesini "RemoteOnly" moduna geri döndürmeyi customErrors
unutmayın.
Geliştirme bilgisayarınızda, hata günlüğü sayfasına ücretsiz erişime izin vermek uygundur, ancak üretimde bu bir güvenlik riski oluşturur. Üretim sitesi için, hata günlüğü erişimini yöneticilere kısıtlayan bir yetkilendirme kuralı eklemek ve kısıtlamanın test ve hazırlamada da çalışmasını istediğinizden emin olmak istiyorsunuz. Bu nedenle bu, bir Yayın derlemesini her dağıttığınızda uygulamak istediğiniz başka bir değişikliktir ve bu nedenle Web.Release.config dosyasına aittir.
Web.Release.config dosyasını açın ve burada gösterildiği gibi kapanış configuration
etiketinden hemen önce yeni location
bir öğe ekleyin.
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<!--
In the example below, the "Replace" transform will replace the entire
<customErrors> section of your web.config file.
Note that because there is only one customErrors section under the
<system.web> node, there is no need to use the "xdt:Locator" attribute.
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
<location path="elmah.axd" xdt:Transform="Insert">
<system.web>
<authorization>
<allow roles="Administrator" />
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
Transform
"Insert" özniteliği değeri, bu location
öğenin Web.config dosyasındaki mevcut location
öğelere eşdüzey olarak eklenmesine neden olur. (Güncelleştirme Kredileri sayfası için yetkilendirme kurallarını belirten bir location
öğe zaten var.)
Artık doğru kodladığınızdan emin olmak için dönüşümün önizlemesini görebilirsiniz.
Çözüm Gezgini'de Web.Release.config öğesine sağ tıklayın ve Dönüştürmeyi Önizle'ye tıklayın.
Sol tarafta geliştirme Web.config dosyasını ve dağıtılan Web.config dosyasının sağ tarafta nasıl görüneceğini ve değişikliklerin vurgulandığı bir sayfa açılır.
( Önizlemede, dönüştürmeleri yazmadığınız bazı ek değişiklikler fark edebilirsiniz: bunlar genellikle işlevselliği etkilemeyen boşlukların kaldırılmasını içerir.)
Dağıtımdan sonra siteyi test ettiğinizde, yetkilendirme kuralının etkili olduğunu doğrulamak için de test edersiniz.
Not
Güvenlik Notu Hiçbir zaman bir üretim uygulamasında hata ayrıntılarını herkese göstermeyin veya bu bilgileri ortak bir konumda depolamayın. Saldırganlar bir sitedeki güvenlik açıklarını bulmak için hata bilgilerini kullanabilir. ELMAH'yı kendi uygulamanızda kullanıyorsanız, güvenlik risklerini en aza indirmek için ELMAH'yı yapılandırın. Bu öğreticideki ELMAH örneği önerilen bir yapılandırma olarak kabul edilmemelidir. Uygulamanın içinde dosya oluşturabilmesi gereken bir klasörün nasıl işleneceğini göstermek için seçilen bir örnektir. Daha fazla bilgi için bkz . ELMAH uç noktasının güvenliğini sağlama.
Profil dönüştürme dosyalarını yayımlamada işleneceğiniz ayar
Yaygın bir senaryo, dağıttığınız her ortamda farklı olması gereken Web.config dosya ayarlarının olmasıdır. Örneğin, WCF hizmetini çağıran bir uygulamanın test ve üretim ortamlarında farklı bir uç noktaya ihtiyacı olabilir. Contoso University uygulaması da bu tür bir ayar içerir. Bu ayar, sitenin sayfalarında geliştirme, test veya üretim gibi hangi ortamda olduğunuzu belirten görünür bir göstergeyi denetler. Ayar değeri, uygulamanın Site.Ana ana sayfasındaki ana başlığa "(Geliştirme)" veya "(Test)" ekleyip eklemeyeceğini belirler:
Uygulama hazırlama veya üretimde çalışırken ortam göstergesi atlanır.
Contoso University web sayfaları, uygulamanın hangi ortamda çalıştığını belirlemek için Web.config dosyasında ayarlanan appSettings
bir değeri okur:
<appSettings>
<add key="Environment" value="Dev" />
</appSettings>
Değer, test ortamında "Test" ve hazırlama ve üretim için "Prod" olmalıdır.
Bir dönüştürme dosyasındaki aşağıdaki kod bu dönüşümü uygular:
<appSettings>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
xdt:Transform
"SetAttributes" öznitelik değeri, bu dönüşümün amacının Web.config dosyasındaki mevcut bir öğenin öznitelik değerlerini değiştirmek olduğunu gösterir. xdt:Locator
"Match(key)" öznitelik değeri, değiştirilecek öğenin özniteliği burada belirtilen öznitelikle eşleşen key
öğe olduğunu key
gösterir. öğesinin add
diğer tek özniteliğidir value
ve dağıtılan Web.config dosyasında değiştirilecek olan budur. Burada gösterilen kod, öğesinin value
özniteliğinin Environment
appSettings
dağıtılan Web.config dosyasında "Test" olarak ayarlanmasına neden olur.
Bu dönüşüm, henüz oluşturmadığınız yayımlama profili dönüştürme dosyalarına aittir. Test, hazırlama ve üretim ortamları için yayımlama profilleri oluşturduğunuzda bu değişikliği uygulayan dönüştürme dosyalarını oluşturacak ve güncelleştireceksiniz. Bunu IIS'ye dağıtma ve üretim öğreticilerine dağıtma öğreticilerinde yapacaksınız.
Not
Bu ayar öğesinde <appSettings>
olduğundan, Azure Uygulaması Hizmeti'nde Web Apps'e dağıtırken dönüştürmeyi belirtmek için başka bir alternatife sahipsiniz. Bu konunun önceki bölümlerinde yer alan Bkz. Azure'da Web.config ayarlarını belirtme.
Bağlantı dizelerini ayarlama
Varsayılan dönüştürme dosyası bir bağlantı dizesi nasıl güncelleştirileceğini gösteren bir örnek içerse de, yayımlama profilinde bağlantı dizesi belirtebildiğiniz için çoğu durumda bağlantı dizesi dönüştürmeleri ayarlamanız gerekmez. Bunu IIS'ye dağıtma ve üretim öğreticilerine dağıtma öğreticilerinde yapacaksınız.
Özet
Yayımlama profillerini oluşturmadan önce Web.config dönüştürmeleri için yapabileceğiniz kadar çok işlem yaptınız ve dağıtılan Web.config dosyasında neler olacağının önizlemesini gördünüz.
Aşağıdaki öğreticide, proje özelliklerini ayarlamayı gerektiren dağıtım kurulum görevleriyle ilgileneceksiniz.
Daha Fazla Bilgi
Bu öğretici kapsamındaki konular hakkında daha fazla bilgi için bkz . Visual Studio ve ASP.NET için Web Dağıtımı İçerik Haritası'nda dağıtım sırasında hedef Web.config dosyasında veya app.config dosyasındaki ayarları değiştirmek için Web.config dönüşümlerini kullanma.