Visual Studio veya Visual Web Developer kullanarak SQL Server Compact ile ASP.NET Web Uygulaması Dağıtma: Web.Config Dosya Dönüştürmeleri - 3 /12
tarafından Tom Dykstra
Bu öğretici serisi, Visual Studio 2012 RC veya Web için Visual Studio Express 2012 RC kullanarak SQL Server Compact veritabanı içeren bir ASP.NET web uygulaması projesi dağıtmayı (yayımlamayı) gösterir. Web Yayımlama Güncelleştirmesi'ni yüklerseniz Visual Studio 2010'u da kullanabilirsiniz. Seriye giriş için serideki ilk öğreticiye bakın.
Visual Studio 2012'nin RC sürümünden sonra sunulan dağıtım özelliklerini gösteren, SQL Server Compact dışındaki SQL Server sürümlerini dağıtmayı ve Azure Uygulaması Service Web Apps'e dağıtmayı gösteren bir öğretici için bkz. Visual Studio kullanarak Web Dağıtımı ASP.NET.
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 öğreticinin kapsadığı senaryo için , Web.config dosyasına yapılması gereken her şeyi 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.
Yayımlama Profilleri için Dönüştürme Dosyaları Oluşturma
Çö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, ancak bu öğretici için bunu yapmanız gerekmez.
Derleme yapılandırması yerine dağıtım hedefiyle ilgili değişiklikleri yapılandırmak için iki dönüştürme dosyası daha gerekir. Bu tür bir ayarın tipik bir örneği, test ve üretim için farklı olan bir WCF uç noktasıdır. Sonraki öğreticilerde Test ve Üretim adlı yayımlama profilleri oluşturacaksınız, bu nedenle bir Web.Test.config dosyası ve bir Web.Production.config dosyası gerekir.
Yayımlama profillerine bağlı dönüştürme dosyaları el ile oluşturulmalıdır. Çözüm Gezgini'da ContosoUniversity projesine sağ tıklayın ve Windows Gezgini'nde Klasör Aç'ı seçin.
Windows Gezgini'nde Web.Release.config dosyasını seçin, dosyayı kopyalayın ve ardından iki kopyasını yapıştırın. Bu kopyaları Web.Production.config ve Web.Test.config olarak yeniden adlandırın, ardından Windows Gezgini'ne kapatın.
Çözüm Gezgini yeni dosyaları görmek için Yenile'ye tıklayın.
Yeni dosyaları seçin, sağ tıklayın ve bağlam menüsünde Projeye Ekle'ye tıklayın.
Bu dosyaların dağıtılmasını önlemek için, bunları Çözüm Gezgini seçin ve Özellikler penceresinde Derleme Eylemi özelliğini İçerik yerine Yok olarak değiştirin. (Derleme yapılandırmalarını temel alan dönüştürme dosyalarının dağıtılması otomatik olarak engellenir.)
Artık Web.config dönüştürme dosyalarını Web.config dönüştürme dosyalarına girmeye hazırsınız.
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 raporlama için Elmah NuGet paketini kullanır. customErrors
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 "sayfa bulunamadı" 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 ekran http://localhost:51130/elmah.axd
görüntüsündeki gibi) 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, Web.Production.config dosyasında bir dönüşüm yapılandırarak hata günlüğü erişimini yalnızca yöneticilerle kısıtlayan bir yetkilendirme kuralı ekleyebilirsiniz.
Web.Production.config dosyasını açın ve burada gösterildiği gibi açılış configuration
etiketinden hemen sonra yeni location
bir öğe ekleyin. (Yalnızca bağlam sağlamak için burada gösterilen çevresindeki işaretlemeyi değil yalnızca location
öğesini eklediğinizden emin olun.)
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<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.) Dağıtımdan sonra üretim sitesini test ettiğinizde, bu yetkilendirme kuralının etkili olduğunu doğrulamak için test edersiniz.
Test ortamında hata günlüğü erişimini kısıtlamanız gerekmez, bu nedenle bu kodu Web.Test.config dosyasına eklemeniz gerekmez.
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, elmah'ın güvenlik risklerini en aza indirmek için nasıl yapılandırılabildiğini araştırdığınızdan emin olun. 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.
Ortam Göstergesi Ayarlama
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 ü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 üretim ortamında "Prod" olmalıdır.
Web.Production.config dosyasını açın ve daha önce eklediğiniz öğenin açılış etiketinden location
hemen önce bir appSettings
öğe ekleyin:
<appSettings>
<add key="Environment" value="Prod" 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. Bu kod, öğesinin value
özniteliğinin Environment
appSettings
üretime dağıtılan Web.config dosyasında "Prod" olarak ayarlanmasına neden olur.
Ardından, Web.Test.config dosyasına aynı değişikliği uygulayın, ancak "Prod" yerine "Test" olarak ayarlayınvalue
. İşiniz bittiğinde, appSettings
Web.Test.config'deki bölüm aşağıdaki örneğe benzer olacaktır:
<appSettings>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
Hata Ayıklama Modunu Devre Dışı Bırakma
Yayın derlemesi için, hangi ortama dağıttığınıza bakılmaksızın hata ayıklamanın etkinleştirilmesini istemezsiniz. Varsayılan olarak Web.Release.config dönüştürme dosyası, özniteliği öğesinden compilation
kaldıran debug
kodla otomatik olarak oluşturulur:
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
özniteliği, Transform
bir Release derlemesi debug
dağıttığınızda dağıtılan Web.config dosyasından özniteliğin atlanmasına neden olur.
Bu dönüşüm Test ve Üretim dönüşüm dosyalarında da geçerlidir çünkü bunları Yayın dönüştürme dosyasını kopyalayarak oluşturdunuz. Orada çoğaltılmış olması gerekmez, bu nedenle bu dosyaların her birini açın, derleme öğesini kaldırın ve her dosyayı kaydedip kapatın.
Bağlantı Dizelerini Ayarlama
Çoğu durumda, yayımlama profilinde bağlantı dizesi belirtebildiğiniz için bağlantı dizesi dönüştürmeleri ayarlamanız gerekmez. Ancak SQL Server Compact veritabanı dağıtırken ve hedef sunucudaki veritabanını güncelleştirmek için Entity Framework Code First Migrations kullanırken bir özel durum vardır. Bu senaryoda, veritabanı şemasını güncelleştirmek için sunucuda kullanılacak ek bir bağlantı dizesi belirtmeniz gerekir. Bu dönüşümü ayarlamak için, hem Web.Test.config hem de Web.Production.config dönüştürme dosyalarında yapılandırma> etiketini açtıktan <hemen sonra bir< connectionStrings> öğesi ekleyin:
<connectionStrings>
<add name="SchoolContext_DatabasePublish" connectionString="Data Source=|DataDirectory|School-Prod.sdf" providerName="System.Data.SqlServerCe.4.0" xdt:Transform="Insert"/>
</connectionStrings>
Transform
özniteliği, bu bağlantı dizesi dağıtılan Web.config dosyasındaki connectionStrings öğesine ekleneceğini belirtir. (Yayımlama işlemi, yoksa bu ek bağlantı dizesi sizin için otomatik olarak oluşturur, ancak varsayılan olarak providerName özniteliği olarak ayarlanır System.Data.SqlClient
ve sql Server Compact için çalışmaz. bağlantı dizesi el ile ekleyerek, dağıtım işleminin yanlış sağlayıcı adına sahip bir bağlantı dizesi öğesi oluşturmasını engellersiniz.)
Contoso University uygulamasını test ve üretim için dağıtmak için ihtiyacınız olan tüm Web.config dönüşümlerini belirttiniz. 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 ASP.NET Dağıtım İçerik Haritası'ndaki Web.config dönüştürme senaryosuna bakın.