test-pit BETA

17.Ocak.2010

Delege

Yukarıda ki kodun çıktısı aşağıdakilerden hangisidir?

Geçen hafta 1. bölümü biten site yayınlama konusunun devamı.

İkinci Bölüm

Bu bölümde, uygulama için tasarlanmış veritabanını uzak sunucuya nasıl aktarılacağına bakacağız. Burada ki söz konusu veritabanı MS Sql Server 2000 yada daha yeni bir sürüm olacak.

Tabiki de bu işlemleri yaparken hizmeti aldığımız hosting firmasının bize sunduğu imkanlar çok önemli. Biz olayı, bakup-restore imkanı vermeyen hosting firmalar için ele alacağız.

Sql Publish Wizard

Hosting firması, bir arayüz ile backup/restore hizmeti vermiyor yada uyumsuzluklardan dolayı işlemi gerçekleştiremiyorsanız yapmanız gereken;
Önce veritabanının DDL(Create) scriptini oluştumanız daha sonra bunu çalıştırmalısınız. İskeleti oluşturduktan sonra DML(Insert) scriptlerini (ki bu çok zahmetli bir işlemdir) oluşturup yine sunucuda çalıştırmanız gerekmektedir. Klasik MS Sql Server Management Studio sadece DDL scriptleri oluşturabilir. İşte tam burada Sql Publish Wizard uygulaması devreye girip hayatımızı kurtarıyor.


VS2008 kurulu ise SWP uygulamasını şu dizin altından bulabilirsiniz;
64 bit işlemciler için C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Publishing\1.2
32 bit işlemciler için C:\Program Files\Microsoft SQL Server\90\Tools\Publishing\1.2

Başlamadan önce belirtmeliyim ki, SPW ile oluşturulan scriptler var olan bir veritabanı üzerinde işlem yapar. Öncelikle sunucu üzerinde aynı adlı bir veritabanı oluşturmuş olmanız gerekmektedir.

Sql Publish Wizard
Kendi bilgisayarınızda kurulu olan sql server' a bağlantı kuruyoruz.

Sql Publish Wizard
Publish edilecek veritabınını seçiyoruz. "Script all objects in the selected database" seçeneği seçildiği takdirde, adım sayısı azalacak ve gerekli olan tüm ddl ve dml scripleri direk oluşacaktır.

Sql Publish Wizard
İhtiyaç duyduğumuz nesneleri (Table,View,Procedure vs) seçiyoruz.

Sql Publish WizardSql Publish Wizard
Alt nesneleri seçiyoruz.

Sql Publish Wizard
Oluşacak script için dosya adı ve yolu belirliyoruz.

Sql Publish Wizard
Uygun Ms Sql Server versiyonu seçillir.

Sql Publish WizardSql Publish Wizard
Özet bilgisi ve ardından scriptimiz oluşturulur.

Bu işlemlerden sonra yapmanız gereken tek şey, oluşan script içeriğini host firmasının size verdiği arayüz de çalıştırmak olacaktır.

İkinci bölümün sonu...

Asp.Net eğitimi alan hemen hemen tüm öğrencilerin sıkıntılarından biri de, yapılan uygulamaların gerçek sunucuda nasıl yayınlanacağıdır. İşi bilenler için gayet basit gibi görünse de tecrübesi olmayan kişiler için ızdırap haline dönüşebilir.
Hal böyle olunca bu konu ile ilgili tecrübelerimi aktaracağım küçük bir yazı dizisi hazırladım.

Konuyu üç bölüm halinde işleyeceğim. İlk bölüm, uygulamanın ftp ile sunucuya yüklenmesi. İkinci bölüm, uygulamanın (varsa) kullandığı veritabanının sunucuya yüklenmesi. Son ve üçüncü bölüm ise bir takım ipuçları içerecektir.

Birinci Bölüm

Bu bölümde, resimde görülen örnek projeyi sunucuya yüklenecek hale getireceğiz. Bunu göstermemim sebebi, uygulamanın çalışması için sunucuya herşeyi yüklenmesine gerek olmadığıdır.
solution

Yayın Öncesi Ayarlar

Yayınlamadan önce bir iki ayar yapmamız gerekiyor. Web.config dosyasını açıp, compilation -> debug özelliğinin degerini false olarak ayarlıyoruz. Bu performans açısından önemli.
compilation
Bu konu ile ilgili daha fazla bilgi edinmek isterseniz Scott Guthrie's şu yazısını okumanızı tavsiye ederim.
Daha sonra, çalışma zamanında ki (Runtime) olası hataları daha ayrıntılı görmek için customError -> mode özelliğinin değerini false olarak ayarlıyoruz.
customerrors
Bunu yapmanızı özellikle tavsiye ederim. Genelde ilk denemelerde hata alma olasılığı yüksektir. Detay görmek problemleri çözmekte çok faydalı olacaktır. Her şey yoluna girdiğinde şu yazıdaki gibi bir hata yönetimi yapmak işinize yarayabilir.


Internet Explorer -> Settings -> Advanced
explorer settings

Seçili Seçili Değil
checked unchecked

Yayın öncesi ayarları yaptıktan sonra sıra geldi uygulamanın sunucuya gönderilecek çıktısının alınması. Bunun için Projeye sağ tıklayıp publish komutunu veriyoruz. Bu komut ile proje önce derlenir, hata (Error) alınırsa işlem iptal olur. Kimi zaman ikazlar (Warning) alabilirsiniz ve genelde de size nerede olduğu konusundan bilgi vermez. Bu gibi durumlarda aklıma gelen olası sorun, projenin ihtiyaç duyduğu bir kaynağı (resim, script vs) bulamamasıdır.
publish folder
Asp.Net projeleri için birden fazla Publish seçeneği bulunmaktadır. Varsayılan seçenek, belirtilen bir klasöre sadece sunucuya gitmesi gereken dosya va klasörlerin çıktısını oluşturu. Zaten bu da bizim istediğimiz seçenek. Diğer seçenekleri görmek yada kullanmak için (Örneğin local sunucuya yayınlamak gibi) üzerinde üç nokta bulunan düğme işinizi görecektir. Herhangi bir değişiklik yapmadan çıktılar için bir yol belirliyoruz.
publish settings
İşlem başarılı bir şekilde tamamlandığında aşağıdaki gibi bir klasör çıktısı olacaktır. Bunlar sunucuya gitmesi gereken dosyalardır.
publish output


Bin klasöründeki dll dosyaları ve config uzantılı dosyalar sunucuya yüklendiğinde(upload) uygulamanız sonladırılır(Application End) ve ilk çağrıda yeniden başlar(Application Start). Bu durumda uygulama içindeki tüm oturum vs yok olacaktır. Size tavsiyem bakım zamanlarını geç saatlerde yapın ve app_ofline.htm adında bir dosya oluşturup sitenin kök klasörüne koyun. Uygulama erişimini engelleyecektir.

Geriye son bir işlem kaldı. Çıktıların sunucuya yüklenmesine. Bunun için bir ftp uygulamasına ihtiyac var. Bir çok paralı yada parasız alternatif olmasına karşın benim tavsiye Total Commander adlı uygulamyı kullanmanız.
ftp site settings
Resimde görüldüğü gibi ftp sunucunuzu uygulamaya kayıt edin. Publish klasöründeki tüm dosyaları sunucu bilgisayarında size verilen (bu genelde ya wwwroot yada httpdocs adında bir klasör olur) klasöre kopyalayın.
ftp publish
 


Enterprise Library, Linq yada EntityFramework gibi yapılar kullanacaksanız, hosting paketinizin size vermiş olduğu Trust Level' ın medium yada full olduğundan emin olun. MVC gibi OutOfBand (şimdilik) denilen framework'lerinde direk çalışmadığını belirtmek isterim . Bunun için sunucunuzdan destek almalısınız.

Artık (veritabanı kullanmıyorsanız) uygulamayı test edebilirsiniz. Olası durumalara karşı problemleri çözüp yukarıda gerekli adımları tekrar etmeniz yeterli olacaktır.

Birinci bölümün sonu ...

Hatasız bir uygulama yazmak için kullanıcıyı ortadan kaldırmaktır diye duymuştum bir zamanlar. Yazılımlarımızda hatalar olacak. Bu kaçınılmaz ama en aza indirmek içinde çaba sarfetmek te bizim görevimiz. Lakin bunun için heryere try cacth blokları da koymak pek mantıklı bir yaklaşım değil:)
Bu durumlar için, özellikle web uygulamalarında "Error Feedback" denilen bir yöntem çok sık kullanılır.
Amaç;
çalışma zamanı bir sayfa da yada ona bağlı bir uygulamada hata oluştuğunda, hata ile ilgili detayların geliştiriciye mail olarak gönderilmesi daha sonra da kullanıcıya hata mesajı yerine basit bir html sayfası gösterilmesinden ibaret.

Öncelikle ihtiyaçları belirleyelim. Yani hangi bilgilerin gönderilmesi gerekiyor bir bakalım.

Error Class

Gönderilecek Feefback için güzle bir html şablonu oluşturalım. Şablon içinde bilgi gireceğimiz alanları küme parantez parametreleri ile işaretleteyim ki String nesnesini Format metotu ile rahatça kullanabilelim.

Mail Text

Daha iyi anlamak için Error nesnesi için yazdığımız yardımcı ErrorProvider nesnesine deki CreateMessage asdlı sabit metota göz atalım.

Error Provider

Herşey tamam gibi, sırada oluşabilecek hataları elde elebileceğimiz Global Application Class' ından yardım almaya geldi. Global.asax ' ın Application_Error adlı metotu, uygulama içinde hata oluştuğunda otomatik devreye girer. Bizde burada devreye girip ihtiyacımız olab kodları yazıyoruz.

Global.asax

Son bir adım kaldı. Kullanıcı hata mesajları yerine bizim belirlediğimiz sayfaları görsün istiyorsak;

Web.Config

web.config dosyası içindeki customError -> mode özelliğini On olarak değiştiririz. error alt düğümleri ile olası hatalar için  uygun sayfaların yollarını redirect özellikleri ile belirttikten sonra uygulamada bitmiş oluyor. Çeşitlendirmek mümkün.

Örnek proje.

Data kaynağınız xml olduğunda okuma veritabanından okumak kadar kolay olmayabilir. XmlDataSorce ile bu işlem çok kolay hale getirebilir.

Repeater

Kodu biraz inceleyelim;
XmlDataSource nesnesinin DataFile özelliği (xml) data kaynağının yolunu ister. Bu disk üzerinde bir dosya olabileceği gibi bir rss dökümanı da olabilir.
Önemli olan DataFile ile belirttilen (xml) data içinden ne istenildiğidir. Bunu yapmanın en pratik yolu xpath kullanmak olacaktır.
XmlDataSource nesnesinin XPath özelliği ile de bunu belirtmek gerekir.

xml

Data kaynağını belirttikten sonra bunu gösterecek bir kontrole ihtiyaç var. Benim seçimim Repeater olacak. (DataList yada Grid de kullanılabilir). ItemTemplate içinde göstermek istenilen node adı XPath metoduna parametre olarak verilir ve değeri gösterilir.

Örnek proje.

Asp.Net sunucu kontrollerinden TextBox kontrolünü TextMode="Multiline" özelliği ile kullanıldığında MaxLength özelliği çalışmamaktadır. Buraya çözüm için alternatif yöntemler yazacağım zaman zaman.

İlk çözüm yine sunucu kontrollerinden CustomValidator ile olacak.

CustomValidator;
textarea

devam edecek...

« Önceki | Sonraki »
Arama