Web Paketi Dağıtımı için Parametreleri Yapılandırma
tarafından Jason Lee
Bu konuda, uzak IIS web sunucusuna bir web paketi dağıttığınızda Internet Information Services (IIS) web uygulaması adları, bağlantı dizeleri ve hizmet uç noktaları gibi parametre değerlerinin nasıl ayarlanacağı açıklanmaktadır.
Bir web uygulaması projesi oluşturduğunuzda, derleme ve paketleme işlemi üç anahtar dosyası oluşturur:
- [proje adı].zip dosyası. Bu, web uygulaması projeniz için web dağıtım paketidir. Bu paket, uzak IIS web sunucusunda web uygulamanızı yeniden oluşturmak için gereken tüm derlemeleri, dosyaları, veritabanı betiklerini ve kaynakları içerir.
- [proje adı].deploy.cmd dosyası. Bu, web dağıtım paketinizi uzak IIS web sunucusunda yayımlayan bir dizi parametreli Web Dağıtımı (MSDeploy.exe) komutu içerir.
- [proje adı].SetParameters.xml dosyası. Bu, MSDeploy.exe komutuna bir parametre değerleri kümesi sağlar. Bu dosyadaki değerleri güncelleştirebilir ve web paketinizi dağıtırken komut satırı parametresi olarak Web Dağıtımı'na geçirebilirsiniz.
Not
Derleme ve paketleme işlemi hakkında daha fazla bilgi için bkz. Web Uygulaması Projelerini Derleme ve Paketleme.
SetParameters.xml dosyası, web uygulaması proje dosyanızdan ve projenizdeki tüm yapılandırma dosyalarından dinamik olarak oluşturulur. Projenizi derleyip paketlediğinizde, Web Yayımlama İşlem Hattı (WPP), hedef IIS web uygulaması ve veritabanı bağlantı dizeleri gibi dağıtım ortamları arasında değişme olasılığı olan birçok değişkeni otomatik olarak algılar. Bu değerler web dağıtım paketinde otomatik olarak parametreleştirilir ve SetParameters.xml dosyasına eklenir. Örneğin, web uygulaması projenizdeki web.config dosyasına bir bağlantı dizesi eklerseniz, derleme işlemi bu değişikliği algılar ve SetParameters.xml dosyasına uygun bir giriş ekler.
Çoğu durumda, bu otomatik parametreleme yeterli olacaktır. Bununla birlikte, kullanıcılarınızın dağıtım ortamları arasında uygulama ayarları veya hizmet uç noktası URL'leri gibi diğer ayarları çeşitlendirmesi gerekiyorsa, WPP'ye dağıtım paketindeki bu değerleri parametreleştirmesini ve SetParameters.xml dosyasına karşılık gelen girişleri eklemesini söylemeniz gerekir. Aşağıdaki bölümlerde bunun nasıl yapılacağı açıklanmaktadır.
Otomatik Parametreleştirme
Bir web uygulaması derleyip paketlediğinizde, WPP şu şeyleri otomatik olarak parametrelendirir:
- Hedef IIS web uygulaması yolu ve adı.
- web.config dosyanızdaki tüm bağlantı dizeleri.
- Proje özellik sayfalarında SQL'i Paketle/Yayımla sekmesine eklediğiniz veritabanları için bağlantı dizeleri.
Örneğin, herhangi bir şekilde parametreleştirme işlemine dokunmadan Contact Manager örnek çözümünü derleyip paketlemeniz durumunda WPP şu ContactManager.Mvc.SetParameters.xml dosyasını oluşturur:
<parameters>
<setParameter
name="IIS Web Application Name"
value="Default Web Site/ContactManager.Mvc_deploy" />
<setParameter
name="ApplicationServices-Web.config Connection String"
value="Data Source=DEVWORKSTATION\SQLEXPRESS;Initial Catalog=CMAppServices;
Integrated Security=true;" />
</parameters>
Bu durumda:
- IIS Web Uygulaması Adı parametresi, web uygulamasını dağıtmak istediğiniz IIS yoludur. Varsayılan değer, proje özellik sayfalarındaki Web'i Paketle/Yayımla sayfasından alınır.
- ApplicationServices-Web.config Bağlantı Dizesi parametresi ,web.config dosyasındaki bir connectionStrings/add öğesinden oluşturuldu. Uygulamanın üyelik veritabanına başvurmak için kullanması gereken bağlantı dizesini temsil eder. Burada sağladığınız değer, dağıtılan web.config dosyasıyla değiştirilir. Varsayılan değer dağıtım öncesi web.config dosyasından alınır.
WPP, oluşturduğu dağıtım paketinde de bu özellikleri parametreleştirir. Dağıtım paketini yüklerken bu özellikler için değerler sağlayabilirsiniz. Paketi , Web Paketlerini El ile Yükleme bölümünde açıklandığı gibi IIS Yöneticisi aracılığıyla el ile yüklerseniz, yükleme sihirbazı herhangi bir parametre için değer sağlamanızı ister. Paketi Web Paketlerini Dağıtma bölümünde açıklandığı gibi .deploy.cmd dosyasını kullanarak uzaktan yüklerseniz, Web Dağıtımı parametre değerlerini sağlamak için bu SetParameters.xml dosyasına bakar. SetParameters.xml dosyasındaki değerleri el ile düzenleyebilir veya otomatik derleme ve dağıtım işleminin bir parçası olarak dosyayı özelleştirebilirsiniz. Bu işlem, bu konunun ilerleyen bölümlerinde daha ayrıntılı olarak açıklanmıştır.
Özel Parametreleştirme
Daha karmaşık dağıtım senaryolarında, projenizi dağıtmadan önce genellikle ek özellikleri parametreleştirmek istersiniz. Genel olarak, hedef ortamlar arasında değişiklik gösterecek tüm özellikleri ve ayarları parametreleştirmeniz gerekir. Bu stratejilere şunlar örnek verilebilir:
- web.config dosyasındaki hizmet uç noktaları.
- web.config dosyasındaki uygulama ayarları.
- Kullanıcılardan belirtmelerini istediğiniz diğer bildirim temelli özellikler.
Bu özellikleri parametreleştirmenin en kolay yolu, web uygulaması projenizin kök klasörüne birparameters.xml dosyası eklemektir. Örneğin, Contact Manager çözümünde, ContactManager.Mvc projesi kök klasörde birparameters.xml dosyası içerir.
Bu dosyayı açarsanız, tek bir parametre girişi içerdiğini görürsünüz. girdisi, web.config dosyasındaki ContactService Windows Communication Foundation (WCF) hizmetinin uç nokta URL'sini bulmak ve parametreleştirmek için bir XML Yol Dili (XPath) sorgusu kullanır.
<parameters>
<parameter name="ContactService Service Endpoint Address"
description="Specify the endpoint URL for the ContactService WCF
service in the destination environment"
defaultValue="http://localhost/ContactManagerService">
<parameterEntry kind="XmlFile" scope="Web.config"
match="/configuration/system.serviceModel/client
/endpoint[@name='BasicHttpBinding_IContactService']
/@address" />
</parameter>
</parameters>
Dağıtım paketinde uç nokta URL'sini parametreleştirmeye ek olarak, WPP dağıtım paketiyle birlikte oluşturulan SetParameters.xml dosyasına karşılık gelen bir giriş de ekler.
<parameters>
...
<setParameter
name="ContactService Service Endpoint Address"
value="http://localhost/ContactManagerService" />
...
</parameters>
Dağıtım paketini el ile yüklerseniz, IIS Yöneticisi sizden otomatik olarak parametrelendirilen özelliklerin yanı sıra hizmet uç noktası adresini ister. Dağıtım paketini .deploy.cmd dosyasını çalıştırarak yüklerseniz, SetParameters.xml dosyasını düzenleyerek hizmet uç noktası adresi için otomatik olarak parametrelenen özelliklerin değerleriyle birlikte bir değer sağlayabilirsiniz.
parameters.xml dosyası oluşturma hakkında ayrıntılı bilgi için bkz. Nasıl yapılır: Paket Yüklendiğinde Dağıtım Ayarlarını Yapılandırmak için Parametreleri Kullanma. Web.config dosya ayarları için dağıtım parametrelerini kullanmak için adlı yordam adım adım yönergeler sağlar.
SetParameters.xml Dosyasını Değiştirme
. deploy.cmd dosyasını çalıştırarak veya komut satırından MSDeploy.exe çalıştırarak web uygulaması paketini el ile dağıtmayı planlıyorsanız, dağıtımdan önce SetParameters.xml dosyasını el ile düzenlemenizi durduracak hiçbir şey yoktur. Ancak kurumsal ölçekli bir çözüm üzerinde çalışıyorsanız, daha büyük, otomatik bir derleme ve dağıtım işleminin parçası olarak bir web uygulaması paketi dağıtmanız gerekebilir. Bu senaryoda,SetParameters.xmldosyasını sizin için değiştirmek için Microsoft Build Engine (MSBuild) gerekir. Bunu MSBuild XmlPoke görevini kullanarak yapabilirsiniz.
Contact Manager örnek çözümü bu işlemi gösterir. Aşağıdaki kod örnekleri yalnızca bu örnekle ilgili ayrıntıları gösterecek şekilde düzenlenmiştir.
Not
Örnek çözümdeki proje dosyası modeline daha geniş bir genel bakış ve genel olarak özel proje dosyalarına giriş için bkz. Proje Dosyasını Anlama ve Derleme sürecini anlama.
İlk olarak, ilgilendiğiniz parametre değerleri ortama özgü proje dosyasında (örneğin, Env-Dev.proj) özellikler olarak tanımlanır.
<PropertyGroup>
<ContactManagerIisPath Condition=" '$(ContactManagerIisPath)'=='' ">
DemoSite/ContactManager
</ContactManagerIisPath>
<ContactManagerTargetUrl Condition =" '$(ContactManagerTargetUrl)'=='' ">
http://localhost:85/ContactManagerService/ContactService.svc
</ContactManagerTargetUrl>
<MembershipConnectionString Condition=" '$(MembershipConnectionString)'=='' ">
Data Source=TESTDB1;Integrated Security=true;Initial Catalog=CMAppServices
</MembershipConnectionString>
</PropertyGroup>
Not
Kendi sunucu ortamlarınız için ortama özgü proje dosyalarını özelleştirme yönergeleri için bkz. Hedef Ortam için Dağıtım Özelliklerini Yapılandırma.
Ardından Publish.proj dosyası bu özellikleri içeri aktarır. Her SetParameters.xml dosyası bir .deploy.cmd dosyasıyla ilişkilendirildiğinden ve sonuçta proje dosyasının her .deploy.cmd dosyasını çağırmasını istediğimizden, proje dosyası her .deploy.cmd dosyası için bir MSBuild öğesi oluşturur ve ilgilendiğiniz özellikleri öğe meta verileri olarak tanımlar.
<ItemGroup>
<PublishPackages Include="$(_ContactManagerDest)ContactManager.Mvc.deploy.cmd">
<ParametersXml>
$(_ContactManagerDest)ContactManager.Mvc.SetParameters.xml
</ParametersXml>
<IisWebAppName>
$(ContactManagerIisPath)
</IisWebAppName>
<MembershipDBConnectionName>
ApplicationServices-Web.config Connection String
</MembershipDBConnectionName>
<MembershipDBConnectionString>
$(MembershipConnectionString.Replace(";","%3b"))
</MembershipDBConnectionString>
<ServiceEndpointParamName>
ContactService Service Endpoint Address
</ServiceEndpointParamName>
<ServiceEndpointValue>
$(ContactManagerTargetUrl)
</ServiceEndpointValue>
</PublishPackages>
...
</ItemGroup>
Bu durumda:
- ParametersXml meta veri değeri ,SetParameters.xml dosyasının konumunu gösterir.
- IisWebAppName değeri, web uygulamasını dağıtmak istediğiniz IIS yoludur.
- MembershipDBConnectionString değeri üyelik veritabanının bağlantı dizesidir ve MembershipDBConnectionName değeri deSetParameters.xml dosyasındaki ilgili parametrenin name özniteliğidir.
- ServiceEndpointValue değeri hedef sunucudaki WCF hizmetinin uç nokta adresidir ve ServiceEndpointParamName değeri deSetParameters.xml dosyasındaki ilgili parametrenin name özniteliğidir.
Son olarak Publish.proj dosyasında PublishWebPackages hedefi, SetParameters.xml dosyasındaki bu değerleri değiştirmek için XmlPoke görevini kullanır.
<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter[@name='%(PublishPackages.ConnectionName)']
/@value"
Value="%(PublishPackages.ConnectionString)"
Condition =" '%(PublishPackages.ConnectionName)'!=''"
/>
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter
[@name='%(PublishPackages.MembershipDBConnectionName)']/@value"
Value='%(PublishPackages.MembershipDBConnectionString)'
Condition =" '%(PublishPackages.MembershipDBConnectionName)'!=''"
/>
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter[@name='IIS Web Application Name']/@value"
Value="%(PublishPackages.IisWebAppName)"
Condition =" '%(PublishPackages.IisWebAppName)'!=''"
/>
<XmlPoke
XmlInputPath="%(PublishPackages.ParametersXml)"
Query="//parameters/setParameter
[@name='%(PublishPackages.ServiceEndpointParamName)']/@value"
Value="%(PublishPackages.ServiceEndpointValue)"
Condition =" '%(PublishPackages.ServiceEndpointParamName)'!=''"
/>
<!--Execute the .deploy.cmd file-->
...
</Target>
Her XmlPoke görevinin dört öznitelik değeri belirttiğini fark edeceksiniz:
- XmlInputPath özniteliği, göreve değiştirmek istediğiniz dosyayı nerede bulacağını bildirir.
- Query özniteliği, değiştirmek istediğiniz XML düğümünü tanımlayan bir XPath sorgusudur.
- Value özniteliği, seçili XML düğümüne eklemek istediğiniz yeni değerdir.
- Koşul özniteliği, görevin üzerinde çalıştırılması veya çalıştırılmaması gereken ölçütdür. Böyle durumlarda koşul, SetParameters.xml dosyasına null veya boş bir değer eklemeye çalışmamanızı sağlar.
Sonuç
Bu konu başlığında SetParameters.xml dosyasının rolü açıklanmış ve bir web uygulaması projesi oluştururken nasıl oluşturulduğu açıklanmıştır. Projenize bir parameters.xml dosyası ekleyerek ek ayarları nasıl parametreleştirebileceğiniz açıklanmıştır. Ayrıca proje dosyalarınızda XmlPoke görevini kullanarak SetParameters.xml dosyasını daha büyük, otomatik bir derleme işleminin parçası olarak nasıl değiştirebileceğiniz açıklanmıştır.
Bir sonraki konu başlığı olan Web Paketlerini Dağıtma, .deploy.cmd dosyasını çalıştırarak veya doğrudan MSDeploy.exe komutlarını kullanarak bir web paketini nasıl dağıtabileceğinizi açıklar. Her iki durumda da SetParameters.xml dosyanızı dağıtım parametresi olarak belirtebilirsiniz.
Daha Fazla Bilgi
Web paketleri oluşturma hakkında bilgi için bkz. Web Uygulaması Projeleri Oluşturma ve Paketleme. Bir web paketini gerçekten dağıtma hakkında yönergeler için bkz. Web Paketlerini Dağıtma. parameters.xml dosyası oluşturma hakkında adım adım izlenecek yol için bkz. Nasıl yapılır: Paket Yüklendiğinde Dağıtım Ayarlarını Yapılandırmak için Parametreleri Kullanma.
Web Dağıtımı'nda parametreleştirme hakkında daha fazla genel bilgi için bkz. Web Dağıtımı Parametreleştirmeyi Uygulamada (blog gönderisi).