ASPState Server Start Guide(TR)

 ASPState Server Start Guide(TR) ASPStateLib version 1.2 EKİM 2014 İÇİNDEKİLER 1. ASPState’e Giriş a. ASPState Nedir? b. Hangi Sorunlara Çözüm Getiriyor? c. Çözümleri Nelerdir? 2. Özellikler a. Güvenlik b. LINQ Desteği c. Klasik ASP Desteği d. Bellek Katmanı e. Database Katmanı f. Olay Kayıtları g. Entegre GC İş Parçacığı h. API Desteği i. Serialize Obje Desteği j. Gelişmiş State Metodları k. Nesne Yönetim Araçları l. Bağımsız Çalışan Web Yönetim Arayüzleri m. Service­Based Mimari n. Dead­Lock Koruması o. Çoklu İzole Website Desteği p. Opsiyonel Katman Seçimleri 3. ASPState Server Kurulum a. Sistem Gereksinimleri b. Kurulum Arayüzü 4. İlk Kullanım a. Lisans Aktivasyonu b. Implementasyon ve Kod Entegrasyonu c. ASPState Website Manager Kullanımı d. Klasik ASP Desteğini Etkinleştirme 5. Sorun Giderme a. Kurulumda Karşılaşıbilecek Olası Problemler ve Çözümleri b. ASPStateLib ve Uygulamalarında Oluşabilecek Olası Sorunlar ve Çözümleri 6. Copyright 1. ASPState’e Giriş ASPState Nedir? Klasik ASP ve ASP.NET uygulamalarında(Webform, MVC) yeni nesil Session, Application ve Cache yöntemleri sunan ortak uygulama kütüphanesidir. Web uygulamalarında kullanılmak üzere, kurulumu kolay, kullanımı basit, servis tabanlı, OOP(Object Oriented Programming) destekli çözümler sunar. Hangi Sorunlara Çözüm Getiriyor? Web geliştiriciler, site yöneticileri ve sunucu yöneticilerinin genel talepleri şu sorunları işaret etmekte: A. Uygulama havuzunun recycle olması, sunucunun restart edilmesi, uygulamanın release/publish edilmesi gibi istisnai durumlarda geçici belleğin(cache) silinmesinden dolayı açık oturumların bellekten silinmesi. Beraberinde gelen veri kayıpları ve sonucunda ise yazılımsal problemler. B. Orta düzey(max günlük 500 bin ziyaretçi) bir web uygulaması(ASP veya ASP.NET) için custom ve ücretli cache/session state server sistemlerinin çok yüksek maliyetlere sahip olması. Bu çözümlerin entegre edilebilmesi için uzun süren kurulum/implementasyon/eğitim süreçleri. C. Klasik ASP ile geliştirlimiş bir web sitesine ASP.NET uygulaması entegre edilmesi koşulunda, uygulama havuzlarının farklı olmasından kaynaklanan nesne iletişim sorunları. Klasik ASP kullanan web sitesinde oturum açmış bir kullanıcının, ASP.NET uygulamasına geçtiğinde tekrar oturum açmak zorunda kalması gibi, platform kaynaklı, tasarım kökenli problemler. D. Microsoft Session State teknolojisinin yönetimsel olmayışından kaynaklı bulma­izleme­güncelleştirme imkanlarının yetersiz kalması. Aktif oturumların kontrol altında tutulamamasıyla sonuçlanan yönetme ve işletme sorunları. E. Önbellekte(Cache) bulunan tüm öğelerin görüntülenemez, nesnenin içeriğinin(değer veya expiration time) görüntülenemez, değiştirilemez veya sona erme süreleri tekrar düzenlenemez olması. F. State(Cache, Application, Session) sunucularına direkt bir müdahale veya entegrasyon yapılamıyor oluşu. G. Oturumlar için, ek bir süreç maliyeti gerektirmeden IP bazlı engellemelerin yapılamaması. Bunun için ekstra yazılım işlemlerinin gerekmesi. Çözümleri Nelerdir? A. Web uygularında en çok karşılaşılan ve baş ağrıtan sorunlardan birisidir uygulama belleğinin release olması. Ziyaretçinin önemli bir işlemi yaptığı esnada Session sonlanabilir ve kullanıcı tekrar login sayfasına yönlenebilir bir farklı caseler ortaya çıkabilir. Böyle bir olasılıkta sayfanın derlenmesi esnasında yine bellek release edileceğindenuygulamanın exception fırlatmasına çoğu zaman kaçınılmaz olur. Bu gibi senaryolarda sunucu belleğinde tutulan Application, Cache ve Session öğeleri haliyle silinmiş olacaktır. ASPSESSIONID ile oluşturulan cookie değeri, state serverda bulunmadığından istenilen öğenin ismiyle(key name) eşleşme gerçekleşmeyecek ve değerler null dönecektir. ASPState mekanizmasının en çarpıcı özelliği, klasik Microsoft State Server uygulamalarına ek olarak veritabanı yedekli olarak çalışmasıdır. CLIENT ⇒ REQUEST ⇒ 1. RESPONSE LAYER (Cache Layer) (Değere karşılık bulunamazsa talep veritabanına katmanına­database layer­ yönlendirilir.) 2. RESPONSE LAYER (Database Layer) (Talep veritabanına yönlendiğinde yanıt, veritabanında ilgili değere karşılık gelen anahtardan gönderilir.) B. Web sitenizde kullandığınız uygulama dili ister Klasik ASP olsun ister ASP.NET(Web form, MVC, 32­64 Bit farketmeksizin) ASPStateLib(ASPStateLib.dll) kütüphanesini sisteme entegre etmeniz çok basittir. Yüksek ölçekli, replicated/mirrored cache server sistemleri gibi Windows kurulumları yapmanıza gerek yoktur. Server node kurulumu yapılmaya gerek duyulmaz. Bu uygulamaları kullanabilmeniz için kaynak kodlarınızda yapmanız gereken küçük modifikasyonlar gerekir. Bu sayede yüksek lisans maliyetlerinden kaçınmanın yanında, zaman maliyetleri de azaltılarak önemli bir avantaj sağlanacaktır. ASPState Server’ı veya araçlarını kullanabilmeniz için tek bir Web kurulumu gerekir. Tamamen web tabanlı arayüzlerden oluşan uygulamalar sayesinde, kurulum ve implemente süreçleri çok kısa sürer. Ortalama olarak 15 dakikada ASPState Server’ı kendi uygulamanızda, hiç bir kesinti olmaksızın kullanmaya başlayabilirsiniz. C. Genellikle geliştirilmesine ASP.NET’ten önce, ASP tabanlı yazılım dilleriyle başlanmış yazılımların karşılaştıkları ortak bir sorundur. Gelişen teknoloji ve ihtiyaçlarla birlikte kurumlar mevcut yazılımlarına aynı web sitesi içerisinde fakat ASP.NET tabanlı yeni nesli bir uygulama geliştirmek istendiğin entegrasyon sorunları yaşanabilir. Ortak web sitesi, ortak veritabanı, ortak uygulama havuzu ve hatta aynı oturum kimliğine sahipistemcilere sahip olmalarına rağmen iki uygulama birbirinden bağımsız olarak çalışmak zorunda kalır. Session, Application, Cache nesneleri ortak olarak kullanılamaz. Bu tip sorunlara uygulamalar arasında güvenlik ihlalleri yaratabilecek geçiş köprüleri kurularak, tüm session­application öğelerinin geçiş yapılan diğer uygulamaya post edilmesi gibi ilkel ve stabil olmayan metodlarla çözümler zaman zaman geliştirilebilmektedir. ASPState tüm bu sorunların üstesinden rahatlıkla gelebilmesi için tasarlanmıştır. İstemci, klasik ASP sayfasından, ASP.NET sayfasına geçiş yaptığı anda son SET edilen değerleri olduğu gibi okuyabilir veya tam tersi durumda ASP.NET sayfasında yazma işlemi yaptığı değeri ASP sayfasında kullanabilir. Bu özellik web uygulamaları arasında sorunsuz ve tam güvenli bir köprü kurulmasını sağlamaktadır. D. ASPState’in 3 farklı web yönetim arayüzü bulunmaktadır. Bunlardan ilki kurulum işlemlerinin yapıldığı “ASPState Setup UI” arayüzüdür. Diğer arayüz, web site oluşturma, aktivasyon ve yönetme aracı olan “ASPState SA Manager” arayüzü. Üçüncü ve en önemli web yönetim arayüzü ise “ASPState Website Manager” arayüzüdür. ASPState Website Manager arayüzü, tüm state server öğelerinizi tek bir konsoldan yönetebilmenizi sağlar. Bu konsol tüm state server öğelerine(Application­Cache­Session) göz atabilmenizi, filtreleme yaparak arama sonuçlarında öğeleri listeleyebilmeniz, öğenin oluşturulma zamanı­son erişme zamanı­sona erme zamanı gibi bilgilerine ulaşabilmenizi, silebilmenizi veya güncellenebilir öğeleri değiştirebilmenizi sağlar. E. ASPState Website Manager arayüzününde yer alan ve state nesnelerinin listelendiği sayfalarda, object tipli serializable nesneler için “Object Viewer” adlı tool bulunmaktadır. Bu araç, basit sistem veri tiplerinin(boolean, string, datetime, integer) dışında kalan ve serializable olarak işaretlenmiş objelerin içeriğine göz atılabilmesini sağlar. Geliştiricilerin MS Visual Studio Debug moddan alışık olduğu bu özellik, uygulamanın canlıya geçtikten sonra üretilen nesneleri anlık olarak görüntülemesini sağlar. F. ASPState mimarisi Object­Oriented­Programming standartlarına tam uygun olarak dizayn edilmiştir. Buna paralel olarak tüm aksiyonlar servis tabanlı olarak hazırlanmıştır. ASPState SA Manager, ASPState Website Manager web arayüzleri, ASPStateLib servisleri baz alınarak hazırlanmıştır ve geliştiriciler için bu projedeki tüm kaynak kodlar emsal teşkil edebilmesi için açık kaynaklı olarak sunulmuştur. Peki bu servisler nerede kullanılabilir? Şu örnek senaryo üzerinden bu gerekliliği basitçe anlatabiliriz: ­ Microsoft Session State Provider kullanan MyContent.com isimli bir web portalı bulunmaktadır. ­ Web yöneticisi portalda kayıtlı ve oturum açmış olan FAKUSER kullanıcı isimli, 85.233.128.12 IP adresli zararlı bir kullanıcı tespit eder. ­ Yönetici, portalın administrator arayüzünden kullanıcıyı siler. ­ Bu işlemden sonra Session henüz sonlanmadığından, Abandon() edilmediğinden, zararlı kullanıcı halen kayıtlı­izin verilen kullanıcıların görüntüleyebilmesine izin verilen sayfalarda işlem yapabilmektedir. Bu örnek sernaryoda ASPStateLib.Service Namespace’i altında bulunan servislerle oluşabilecek potansiyel problemler çözümlenebilir. Web portalı, administrator arayüzünde, kullanıcı silme metodunun sonuna eklenecek şu basit kod bloğu, bu işlemin güvenli bir şekilde gerçekleştirilmesini sağlar. SearchModel searhparameters = new SearchModel(); searhparameters.ClientIp = "85.233.128.12"; List<SessionModel> activeSessionList = searchService.SearchSessionList(searhparameters).Data as List<SessionModel>; var getSession = activeSessionList.FirstOrDefault(x => x.Alias == "FAKUSER"); sessionService.RemoveSession(getSession); Bu kod tüm aktif Session öğelerinin olduğu listeden “85.2333.128.12” IP adresli tüm Session öğelerini getirir. “List<SessionModel>” türündeki listeden, lambda sorgusuyla takma adı “FAKUSER” olan kullanıcı getirilir. “SessionService.RemoveSession” metodu ile aktif kullanıcının oturumu sunucudan(ön bellek ve veritabanından) silinir. Daha fazla kod örneği için “ASPState.sln/ASPStateExamples” projesi içerisindeki örneklerini inceleyebilir, servis ve diğer nesneler hakkında detaylı bilgi için ASPState Sınıf Dokümantasyon sayfasına göz atabilirsiniz. http://www.aspstate.com/Developer/Documentation G. Web sayfasındaki içeriğin yetkilendirilmesi ve izinlerin düzenlenmesinde en etkin kullanılan yöntemler genellikle Session nesneleri üzerinden depolanmaktadır. “If (Session["IsAuthenticated"] == true){....}” gibi basitçe veya daha gelişmiş kontrollerle sayfa içerisindeki güvenlik sağlanmaktadır. Girişine izin verilmeyen IP adreslerine uygulanacak aksiyonlar için genellikle ekstra programlama süreci oluşturulur. ASPState’te bulunan etkili araçlardan biriside “BWL” yani “Black/White List” uygulamasıdır. Bu sayede kendi web uygulamanızda belirlenmiş bir IP grubuna SET operasyonunu açabilir(WhiteList Protection) veya belirli IP adreslerine kapatabilirsiniz(BlackList Protection). Client IP denied/granted aktivasyonuyla sadece izin verilen IP adreslerine Session Set işlemleri yapabilecektir. Özetle X IP adresli kullanıcı karalisteye eklenmiş ise, “Session["IsAuthenticated"] = true;” gibi bir kod satırından sonra bile “bool authenticated = Session["IsAuthenticated"]” kod satırı true döndürmesi gerekirken, IP filtresine girmiş olduğundan SET işlemi gerçekleşmeyecek, false yanıtı dönecektir. 2. Özellikler Güvenlik ASPState servisleri, uçtan uca tam güvenli ortamda iletişimini sağlamaktadır. Veritabanı katmanından, iş katmanına, yönetimsel araçlardan istemci bazlı servislere kısaca tüm işlemlerde yüksek katı güvenlik prosedürleri uygulanmaktadır. Bunlardan güvenlik ilkelerden public olmayan en önemlileri şunlardır: ❏ Yönetim uygulamasının(ASPState Website Manager) farklı bir sunucuda/domain altında çalışması durumunda kullanıcı oturumların depolandığı sunucu ile iletişim halinde olması gerekir. Bu iletişim güvenliği APICredential servisi ile birden fazla doğrulama yapılarak gerçekleştirilir. Öncelikle gelen talep paketinin verisel bütünlüğü kontrol edilir. Ardından yönetici tarafından belirlenen APIAuthCode değerinin ve her 3200 saniyede otomatik oluşturulan APITokenKey bilgilerinin doğrulu kontrol edilerek talep paketinde gelen işlem gerçekleştirilerek yanıt(response) nesnesi karşılık olarak döndürülür. ❏ Uygulama katmanı ile veritabanı katmanı ayrılmış olup, SQL Injection gibi uygulama dışından sorguların çalıştırılamaması için tüm data işlemleri SQL saklı yordamlar(stored procedures) vasıtasıyla yapılmıştır. Sp(Stored procedure) dosyalarının dışında veri okuma veya yazma işlemleri uygulamanın hiç bir bölümününde yer almamaktadır. ❏ Session kullanımlarında kullanıcı kimliği yerine geçen SessionId değerleri sadece Session State Server tarafından oluşturulabildiği için dışarıdan verilebilecek farklı bir değer kabul edilmemektedir. ❏ ASPState Website Manager üzerinden yapılan tüm yönetimsel işlemler/uyarılar/hatalar sistem loglarına detaylı olarak kayıt edilir. LINQ Desteği ASP.NET ve MVC uygulamalarında kullanılmak üzere tüm durum nesnelerinde(Application­Cache­Session State) LINQ sorgulaması yapılabilmesine olanak tanınmaktadır. ASPStateLib.Model namespace ağacı altında yer alan varsayılan modeller ile nesneler üzerinde işlemler pratik bir şekilde gerçekleştirilir. Klasik ASP Desteği .NET mimarisi üzerine kurulan ASPState, klasik ASP geliştiricilerinede tıpkı ASP.NET sayfalarında olduğu gibi durum nesnelerini(Application­Cache­Session State) ve durum servislerini(Application­Cache­Session Service) kullanma imkanı verir. Bellek Katmanı GET işlemlerinde ilk yanıtın döndürüldüğü katmandır. “CachedRepository” seçeneğinin aktif olması halinde işlemler gerçekleştirilir. Cache State nesnesinin dışında, Application ve Session durum nesneleride ASPState önbellek sunucusunu kullanmaktadır. Bellekte geçersiz duruma gelmiş, sona erme süresini tamamlamış öğeler için “JobGarbageCollector” isimli iş parçağı belirli sürelerde aktifleşerek bu öğeleri sistem belleğinden temizlemektedir. Bu olaylar aynı zamanda log kayıtlarına da eklenmektedir. Database Katmanı ASPState’in en önemli özelliklerden birisi de, tüm veri kopyalarının senkron olarak depolandığı veritabanı katmanıdır(DbRepository). Veri kayıplarının önüne geçmek ve farklı platformlar arası(ASP­ASP.NET) senkron çalışan veri iletişimini sağlamak için oluşturulmuştur. Olay Kayıtları Servis metod çağrıları, ASPState Web Manager aracılığıyla yapılan tüm yazma(SET) işlemleri, önem derecesine göre sistem loglarına detaylı olarak kayıt edilir. Kayıt edilen olaylara ait loglar ASPState Website Manager panelinden detaylı olarak gruplandırılabilmekte ve incelenebilmektedir. Kayıt edilen bilgiler ise; istemcinin IP adresi, olay tipi(LogMsgType Enum), öncelik tipi(LogPriorityType Enum), hata kaydı ise sunucu değişkenleri(SERVERVARIABLES), log detayı ile zaman damgası. API Callback işlemlerinde sunucu, kimlik doğrulama, veritabanı veya farklı bir istisna oluşması durumunda Request/Response JsonString bilgileride analiz edilmek üzere kayıt edilir. Ayrıca iş parçacıklarının(Job) her görev tamamlama işleminden sonra bu işlemden etkilenen verilerde loglara kayıt edilir. Entegre GC(Garbage Collector) İş Parçacığı ASPState’in önemli avantajlardan birisi de yedekli çalışmasına rağmen sunuduğu yüksek performanstır. Yazılım iş süreçleri de bu kriter doğrultusunda oluşturuldu. İstemcilerin Session nesnesine erişme zamanları(LastAccessTime), sona erme süresi(ExpirationTime) ve sona erme(expiration) süresi dolan Cache ve Session öğelerinin bellekten temizlenmesi gibi güncellenmesi gereken değerler bu iş parçağı ile anlık olarak(senkron) değil, bellekte biriktirme(Queue) mantığıyla asenkron olarak yapar. Böylece sayfanın hızlı yanıt vermesi sağlanarak, bellek temizlenme süreçleri otomatik olarak çalışması sağlanır. API Desteği Esnek yapısı ile ASPState bileşenleri farklı sunucularda çalışma kabiliyetine sahiptir. Örnek bir senaryoda kurumun güvenlik prosedürleri gereği, web sitesinde çalışan uygulamanın dışında farklı bir uygulamanın çalıştırılamayacağı varsayılmaktadır. ASPState Website Manager panelide bu kural gereği farklı bir alan adı altında çalıştırılması gerekecektir. Aynı senaryo web arayüzü ile yönetim paneli arayüzünün farklı alan adı veya farklı sunucularda çalıştırıldığı(örneğin store.com web sitesi, admin.storemanager.com yönetim sitesi gibi) durumlar içinde da geçerlidir. Local cache öğelerininde yönetilmesi, panelden “Kill” edilen Session öğesinin, asıl uygulamanın çalıştığı sunucuya da yansıtılması gibi, direkt uygulamanın çalıştığı, ApplicationPool işlemini etkileyen durumlar için ASPState API geliştirilmiştir. API, Http protokolünü kullanarak ASPStateLib nesnesinin kullanıldığı hedef web sitesinde ilgili servisi tetikleyerek, iki uygulamanın aynı web sitesinde çalışıyormuşçasına senkron yanıt vermesini sağlar. Bir Cache öğesinin ASPState Website Manager paneli üzerinden güncellendiği bir senaryo göz önüne alınırsa; ❏ AJAX talebi /ASPStateMng/OperationController.aspx sayfasına gönderilir. ❏ Sırasıyla “OperationController.SetCacheItem” ve “ApiExecuteManager().CreateApiRequest” metodu çalıştırılır. ❏ “ApiExecuteManager().CreateApiRequest” metodu ApiRequestModel türünde yeni bir nesne oluşturur. ❏ Nesnenin “ApiRequestModel.ApiCredential” üyesine ApiCredentialModel türünde kimlik doğrulama bilgileri atanır. ❏ Talebin hangi servisi tetikleceği “ApiRequestModel.ActionType” üyesine atanır. ❏ Karşı tarafa gönderilecek paket “ApiRequestModel.SerializableObject” nesne üyesine atanır. ❏ Oluşturulan ApiRequestModel türündeki obje serialize edilerek, JSON string formatına dönüştürüldükten sonra sistem ayarlarından “PrimaryApiCallBackUrl” olarak belirtilen adrese POST metodu ile gönderilir. ❏ Genel olarak “PrimaryApiCallBackUrl” değeri ile sadece birincil API adresi belirtmek yeterlidir. Fakat web sitesinde ASP ve ASP.NET aynı anda kullanılıyor ise ASPState Website Manager üzerinde yapılan değişikliklerin ayrı ayrı API adreslerine gönderilerek güncellenmesi gerekir. Bu gibi varsayımlarda kullanılmak üzere “SecondaryApiCallBackUrl” ile ikinci güncelleme fonksiyonu eklenmiştir. ❏ Sadece PrimaryApiCallBackUrl değerinin belirtildiği durumlarda okuma/yazma(GET/SET) işlemleri bu URL üzerinden yapılır. PrimaryApiCallBackUrl ve SecondaryApiCallBackUrl değerinin belirtildiği durumlarda ise okuma(GET) işlemleri sadece PrimaryApiCallBackUrl üzerinden, yazma(SET) işlemleri ise hem PrimaryApiCallBackUrl hem SecondaryApiCallBackUrl üzerinden yapılır. ❏ Kullanıldığı platform tipine göre “~/ASPStateApi/ApiRequest.asp” veya “~/ASPStateApi/ApiRequest.aspx” dosyası execute edilir. ❏ Talep işleme konulmadan önce “ApiRequestModel.ApiCredentialModel” üyesinde bulunan API Token Key ve API Auth Code verilerinin doğrulaması yapılır. Bu kimlik kontrol niteliği taşır. ❏ Talep edilen servis çalıştırıldıktan sonra oluşan yanıt değerleri ApiResponseModel türündeki nesneye atanır. ❏ Nesne yanıtı oluşturulduktan sonra bu obje yine serialize edilerek JSON string çıktısı üretilir. ❏ JSON Çıktı metni deserialize edilerek geri dönüş nesnesi olarak sayfada kullanılabilir. Serialize Obje Desteği ASPState’te bulunan tüm durum(Application­Cache­Session State) hizmetlerinde, sistem nesnelerinin(System.String, System.Int16, System.Boolean) yanı sıra, serialize edilebilir nesnelerde katmanlarda bulundurulabilmektedir.(ADODB nesneleri, hashtable, datatable, dictionary, uygulamaya özel model nesneler vb.) Bunun için ilgili nesne öz niteliğinin(attribute), serialize([Serializable]) olarak işaretlenmiş olması yeterlidir. Gelişmiş State Metodları ASP ve ASP.NET uygulamalarında kullanılan klasik metodların(Session.Abandon(), Cache.Count, Application.AllKeys gibi) dışında ASPState yeni, kullanışlı metodlara sahiptir. Bunlar ise: ❏ Application.GetCurrentApplicationModel (get) ❏ Cache.GetCurrentCacheModel (get) ❏ Cache.Set (set) ❏ Session.Alias (get/set) ❏ Session.ClientIp (get) ❏ Session.GetCurrentSessionModel (get) Nesne Yönetim Araçları ASPState Website Manager’da bulunan dahili araçlar şunlardır: ❏ Durum sunucularında(Application, Cache, Session state) bulunan object tipinden türemiş nesnelerin görüntüleneceği “Object Viewer”. ❏ Session koleksiyonuna yazma(SET) işlemi yapması engellenmek istenen veya sadece belirli IP adreslerine izin verilebilen kara liste uygulaması(BWL Manager). ❏ Sunucu kaynaklarının izlenebildiği, sistemdeki son aktivitelerin izlendiği ve hızlı güncelleme işlemlerinin(BWL liste temizleme, application­cache­session nesnelerini silme) yapılabildiği Dashboard/Giriş sayfası. ❏ Güncelleştirilebilir nesnelerin değer, sona erme süresi(ExpirationTime) gibi değiştirilebilir bilgilerin güncellenebilmesine olanak sağlayan Object Manager. Bağımsız Çalışan Web Yönetim Arayüzleri ASPState fonksiyonlarına sadece ASPStateLib kullanılarak uygulamada çalıştırılabileceği gibi, birbirinden bağımsız çalışan üç farklı arayüzde kullanılabilir. Arayüzler şunlardır: ❏ İlk ASPState Server kurulumunun yapıldığı “ASPState Setup UI”. ❏ Kullanıcının satın almış olduğu ASPState lisanslarını website bazında aktifleştirip, yönetebildiği “ASPState SA Panel”. ❏ Aktif edilen web sitelerindeki, tüm yönetim süreçlerinin gerçekleştirildiği “ASPState Website Manager”. Service­Based Mimari Tüm durum nesneleri servis tabanlı olarak, ASPStateLib.Service namespace ağacı altında bulunan metodları çalıştırarak işlem yapmaktadır. Bu sayede geliştiriciler servisleri kullanarak hem kendi uygulamalarına kolaylıkla entegre edebilir hem de bu servisler üzerinden yeni uygulamalar geliştirebilmektedir. Servislerin, veritabanına ulaşması gerektiği durumlarda, aynı isimdeki saklı yordamlar(stored procedure) kullanılır. Servislerin kapsamları kısaca şu şekilde belirtilmiştir: ❏ ApiService : Talep(Request) ve Yanıt(Response) nesne iletişimleri, kimlik doğrulama işlemleri, tetiklemeler bu servis üzerinden gerçekleştilir. ❏ ApplicationService : Application durum nesnesinin(Application State) tüm işlemleri bu servis aracılığıyla yapılır. Veritabanı ile ilgili olan işlemler “spASPState_ApplicationService” SQL saklı yordamı(stored procedure) ile yapılır. ❏ CacheService : Cache durum nesnesinin(Cache State) tüm işlemleri bu servis ile yapılır. ❏ CommonService : Servislerin ortak kullandığı metod ve fonksiyonların bulunduğu servistir. Veritabanı ile ilgili olan işlemler “spASPState_CommonService” SQL saklı yordamı(stored procedure) ile yapılır. ❏ SAService : ASPState SA Panel(System Administrator) aracılığıyla yapılan işlemler bu servis aracılığıyla gerçekleştirilir. Veritabanı ile ilgili olan işlemler “spASPState_SAService” SQL saklı yordamı(stored procedure) ile yapılır. ❏ SearchService : ASPState Website Manager, Cache, Session, Application, Bwl ve Log listeleme sayfalarında kullanılan, ilgili nesnelerin filtrelenebilmesine olanak sağlayan servistir. Veritabanı ile ilgili olan işlemler “spASPState_SearchService” SQL saklı yordamı(stored procedure) ile yapılır. ❏ SessionService : Session durum nesnesinin(Session State) tüm işlemleri bu servis ile yapılır. Veritabanı ile ilgili olan işlemler “spASPState_SessionService” SQL saklı yordamı(stored procedure) ile yapılır. Dead­Lock Koruması Derleyiciye gelebilecek anlık taleplerde veya yüksek sayfa görüntülemesine sahip web uygularının kuyrukta bekletmesi esnasında ortaya çıkabilecek bir sorundur. Web uygulama katmanında veya SQL veritabanı katmanında oluşabilir. Bu gibi durumlarla karşılaşılmaması için ilgili yerlerde lock koruması bulundurularak kod optimizasyonu sağlanmıştır. Çoklu­İzole Website Desteği ASPStateLib uygulmasını kullanabilecek Windows sunucusunda, birden fazla web sitesi bulunabileceği olası bir durumdur. Her web sitesi için ayrı kurulum, ayrı veritabanı gibi bir gereksinim olmaksızın sitelerin tek bir sunucu ve veritabanında izole bir şekilde bağımsız çalışmasını sağlar. Opsiyonel Katman Seçimleri Kullanılan yazılım dili, performans seçimleri, yedekli çalışma sisteminin(DbRepository) gerekliliği gibi standartlar doğrultusunda oluşturulmuş olan katmanlardan talep edilenleri çalıştırılacaktır. ❏ Stabilite, performans ve veri kaybı yaşanmaması gibi gerekliliklerin talep edildiği durumlarda DbRepository ve CachedRepository açık duruma getirilir. Bu durum nesnelerin hem bellekte hem de veritabanında depolanmasını sağlar. ❏ Maximum performansın öncelikli olduğu durumlarda, durum nesnelerinin veritabanında depolanması gereksiz bulunabilir. Bu gibi senaryolarda DbRepository kapalı, CachedRepository açık konuma getirilerek nesnelerin sadece bellekte depolanması sağlanır. ❏ ASP ve ASP.NET uygulamasının anlık olarak birbirinin iletişimde kalmasının istendiği durumlarda CachedRepository kapalı, DbRepository açık konuma getirilir. Tüm durum nesnesi öğeleri sadece veritabanında depolanacak ve yanıt veritabanından geleceği için farklı tipteki uygulamalar tam senkron olarak birbirleriyle etkileşim içinde çalışabilecektir. 3. ASPState Server Kurulum Sistem Gereksinimleri ASPState uygulamasının ve bileşenlerinin sunucuda stabil çalışabilmesi optimal fiziksel ve yazılımsal gereksinimlere ihtiyaç duyar. Kuruluma geçmeden önce sistem konfigürasyonunuzun aşağıda belirtilen kıstaslarla olan uyumluluğunu gözden geçirin. ­ ASP­ASP.NET Desteği (ASP desteği opsiyoneldir) ­ Windows Server 2003­2008­2012 ­ IIS 6.0 / 7.0 / 8.0 / 8.5 ­ x86 / x64 Platform ­ Microsoft SQL Server 2005 / 2008 / 2012 ­ .NET Framework 4/4.5/4.5.1 Kurulum Arayüzü İlk kurulumun işleminin yapıldığı aşamasıdır. Bu işlem her sunucuda sadece bir defaya mahsus olmak üzere yapılır. Aynı web sitesinde, başka bir çalışan web uygulaması var ise, bu uygulama kurulumdan hiç bir şekilde etkilenmemektedir. Kurulum kendi veritabanını oluşturmakta yine ilişkili yapılandırmaları gerçekleştirmektedir. Kurulumu başlatmak için öncelikle ~/ASPStateManager/ASPStateMng/Installation/Setup.aspx sayfası çalıştırılır. Tüm alanlar doldurulduktan sonra “ASPState Setup UI” şu işlemleri sırasıyla gerçekleştirecektir: ❏ “SQL Connection String” alanıda belirtilen MSSQL bağlantının geçerliliğini kontrol eder.(InstallationAction1) ❏ SQL Veritabanı oluşturulmamışsa yeni bir veritabanı oluşturur veya mevcut veritabanını güncelleştirir. Güncelleştirmeler ise “ASPState_***” prefixi ile tabloların oluşturulması, “spASPState_***” prefixi ile saklı yordamlar(stored procedure) oluşturulması, “fnASPState_***” prefixi ile scalar functionların oluşturulması işlemlerinden oluşur. ❏ Varsayılan(DEFAULT) yapılandırma ayarları, ASPState_Setting tablosune eklenir. ❏ Log dizinine olan erişim kontrolünün yapılması ve web.config dosyasına “ASPStateConn” isimli bağlantı satırının eklenmesiyle tamamlanır. 4. İlk Kullanım Lisans Aktivasyonu Kurulumun ardından sıradaki işlem, satın alınan veya trial olarak edinilen lisans anahtarının aktifleştirilmesinden oluşur. “~/ASPStateManager/ASPStateMng/SA_Login.aspx” sayfasından giriş yapılır. Ardından sağ üst köşedeki “New Web Site” butonu tıklanarak lisans kodu ve diğer bilgiler girilir. Lisans doğrulaması ve etkinleştirmesi online olarak yapılacağından, sunucunun https://secure.asptate.com web sitesine erişiminin açık olduğundan emin olunmalıdır. Aktivasyon işleminden sonra tüm tablo ve yapılandırma işlemleri sistem tarafından otomatik yapılarak “ASPStateLib.dll” ve “ASPState Website Manager” paneli kullanılabilir hale gelir. Implementasyon ve Kod Entegrasyonu Halihazırda kullanılan uygulamada yoğun bir kod değişikliği gerekmeksizin, şu basit değişiklikler yapılarak hemen kullanıma geçilebilir. ● Web.config dosyasında ASPStateConn isimli bağlantı satırının bulunduğunu onaylayın. ● Web.config dosyasında şu nodeların bulunduğunu onaylayın: ○
○
○
○
●
<system.web> <httpRuntime maxQueryStringLength="32768" maxUrlLength="65536" /> <sessionState mode="Off" /> </system.web> Application­Cache­Session tanımlamaları için inherited class olarak “ASPStateLib.Base.Page” sınıfını referans gösterin. Bunun için Default.aspx dosyasında şuna benzer bir değişiklik yapılması gerekmektedir: ○ public partial class Default: System.Web.UI.Page ○ { ○
protected void Page_Load(object sender, EventArgs e) ○
{ // ONLOAD CODE } ○ } ○
olan kodunuzu, ○ ○ public partial class Default: ASPStateLib.Base.Page ○ { ○
protected void Page_Load(object sender, EventArgs e) ○
{ // ONLOAD CODE } ○ } ○
şeklinde değiştirmeniz yeterli olacaktır. Aynı düzenlemeler MasterPage ve UserControl sayfaları içinde geçerlidir. Kullanım örnekleri ve detaylı anlatımlar www.aspstate.com/developer/documentation sayfasında detaylı olarak anlatılmıştır. ● MVC ve diğer tür ASP.NET uygulamalarında kullanmak için “class” başlangıç kodunuzun hemen içerisine şunları veya sadece kullanmak istediğiniz durum nesnelerini ekleyin: ○
○
○
●
public new ASPStateLib.State.HttpCacheState Cache = new ASPStateLib.State.HttpCacheState(); public new ASPStateLib.State.HttpSessionState Session = new ASPStateLib.State.HttpSessionState(); public new ASPStateLib.State.HttpApplicationState Application = new ASPStateLib.State.HttpApplicationState(); Uygulamanızı derleyin ve log dizininde herhangi bir hata kaydı olmadığından emin olun. ASPState Website Manager Kullanımı Başlamak için “~/ASPStateManager/ASPStateMng/Login.aspx” sayfasını kullanın. SA Panelden “state_admin” varsayılan kullanıcı adıyla oluşturulan, Website yöneticisinin şifresini girerek login olun. Uygulama türüne göre “API Configuration” sayfasından APICallBackUrl bilgilerini ve diğer bilgileri güncelleyin. Daha detaylı bilgi ve ipuçları için “ASPState ­ Manager Panel Guide(TR)” dosyasına göz atabilirsiniz. Klasik ASP(.asp) Desteğini Etkinleştirme Kurulum ve yapılandırma işlemlerinden sonra Windows servisleri üzerinde bir işlem yapmadan ASP.NET sayfaları için ASPStateLib.dll kütüphanesini hemen kullanmaya başlayabilirsiniz. Fakat klasik ASP sayfa kullanıcıları, ASPStateLib.dll ve ASPStateManager.dll bileşenlerini kayıt etmeleri gerekmektedir. Bu assembly dosyaları StrongNameKey(snk) ile işaretlenmiş ve kayıt edilebilir dosyalardır. Aşağıdaki örnekte olduğu gibi, ASPStateLib.dll ve ASPStateManager.dll dosyalarını, website kullanıcısının erişim yetkisine açık bir dizine kopyalayın. Ardından komut satırı istemcisini, yönetici modunda(Run as administrator) çalıştırarak aşağıdaki kayıt(register) işlemlerini hem ASPStateLib.dll hem de ASPStateManager.dll için yapın. 1.
2.
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\regasm.exe /codebase /tlb "C:\YOUR_APP_PATH\bin\ASPStateLib.dll" %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\regasm.exe /codebase /tlb "C:\YOUR_APP_PATH\bin\ASPStateLib.dll" İşletim sistemi platform tipine(x64, x86) göre “...Microsoft.NET\Framework\v4.0.30319…” olan register assembly(regasm) dosya yolunu “...Microsoft.NET\Framework64\v4.0.30319…” olarak değiştirebilirsiniz. Klasik ASP kod ile örneklerini, Solution projesinde bulunan “ASPStateExamples” projesi içerindeki ASP dosyalarından inceleyebilirsiniz. 5. Sorun Giderme Kurulumda Karşılaşıbilecek Olası Sorunlar ve Çözümler Semptom: “Start Setup” butonuna basıldığında tarayıcı hata veriyor. Çözüm: Aşağıdaki örnekte, hata detaylarının nasıl görüntüleneceğine dair bir ekran görüntüsü yer alıyor. Ekran görüntüsünde hatalı olarak işaretlenmiş satırın SQL bağlantı satırı olduğu ifade edilmekte. Bunun nedeni yanlış veya yetkisiz bir bağlantının belirtilmiş olmasıdır. Bu gibi durumlarda “Restart Setup” bağlantısını tıklayarak, ilk kurulum sayfasında belirttiğiniz değerleri tekrar gözden geçirerek yeniden kurulumu başlatmanız önerilir. Semptom: “Parser Error Message: Unrecognized attribute 'maxQueryStringLength'. Note that attribute names are case­sensitive.” Çözüm: IIS sunucunuzda .NET Framework 4.0 kurulu ve etkinleştirilmiş olduğundan emin olun. IIS Manager > Application Pool > Seçili Uygulama Havuzunu tıklayın. “Advanced Settings...” sekmesini tıklayın.”.NET Framework Version” seçeneğini “v4.0” olarak tanımlayın. Ayrıca “Enable 32­bit Application” seçeneğinin “True” ve “Managed Pipeline Mode” seçeneğinin “Integrated” olarak seçildiğinden emin olun. ASPStateLib ve Uygulamalarında Oluşabilecek Olası Sorunlar ve Çözümler ASPStata Server kurulumundan sonra oluşabilecek hatalar veritabanına, fatal error olarak tabir edilen ve veritabanına yazılamayacak ölümcül hatalar ise, kurulum esnasında belirtilen fiziksel yolda oluşturulan günlük log dosyalarına yazılır. Bu yolu değiştirmek isterseniz, web.config dosyasına şu parametreyi ekleyin veya güncelleyin. ­ configuration/appSettings anahtarının altına <add key="ASPStateLogFolderPath" value="C:\ASPState\Logs" /> etiketini ekleyin ve değeri değiştirin. Uygulamanın burada belirtilen yola yazma izni olduğundan emin olun. “ASPState Website Manager” panelde yer alan testi kullanarak yazma iznini test edebilirsiniz. Semptom: Hata Kodu > 2006 Hata Tipi > JobGarbageCollectorError Çözüm: ASPStatLib.Service namespace ağacı altında bulunan CommonService.JobSessionTimeoutExecuted metodunda oluşan ve genelde thread execute edilmesi esnasında oluşan yetki problemlerinden kaynaklanır. Yetki sorunlarında, IIS ayarlarından, uygulama havuzu ve web site kullanıcı yetkilerinin kontrol edilmesi gereklidir. Semptom: Hata Kodu > 3005 Hata Tipi > JobSessionTimeUpdaterError Çözüm: 2006 kodlu hatanın alınmasına sebebiyet verecek koşullar, bu hata tipinde de geçerlidir. Aynı çözüm bu hatanın giderilmesinde uygulanabilir. Semptom: Hata Kodu > 5003 Hata Tipi > ConnectionStringFromAppConfigError Çözüm: Bu ölümcül bir hatadır ve ASPStateLib bileşeninin, dolayısıyla web uygulamanızın çalışmamasına sebep olur. SQL bağlantı bir kaynaklı olduğundan veritabanı sistem loglarına yazılmaz. Bu gibi ölümcül(fatal) hatalar Web.config dosyasında “ASPStateLogFolderPath” olarak hedef gösterilen dizinde log kaydı oluşturularak kayıt altına alınır. 5003 kodlu hata ise web.config dosyasında “ASPStateConn” isimli bir bağlantı satırı tanımlanmadığını gösterir. Dosyada ASPStateConn isimli ve kullanılabilir bir bağlantı tanımlanması gerektiğine işaret eder. ASPStateLib derlemesinin bulunduğu tüm web dizinlerinin root web.config dosyasında”~/Web.config” mutlaka bu bağlantı satırının tanımlaması gereklidir. Tanımlama ilk kurulum esnasında “ASPState Setup UI” tarafından otomatik olarak yapılır. Semptom: Hata Kodu > 5004 Hata Tipi > DataAdapterExecuteError Çözüm: Web.config dosyasında ASPStateConn isimli bir bağlantı satırını bulunduğunu fakat bağlantının kurulamadığına işaret eder. Bu durumda bağlantının geçerliliğini kontrol edilebilir. Semptom: Hata Kodu > 5005 Hata Tipi > CreateApiRequestError Çözüm: ASPStateManager.Common namespace ağacı altında, “ApiExecuteManager.BeginApiRequest” metodunda oluşur. “ASPState Website Manager” aracılığıyla yapılan API taleplerinde istisna(exception) oluşması durumunda ortaya çıkar. Yanıt sunucundan gönderilen ve JSON string halinde bulunan verinin parse edilememesi gibi durumlar(format hatası gibi) bu hataya sebep olabilir. Bu gibi hatalarda yanıt objesinin detaylı analiz edilmesi ve hata kayıtlarının ASPState Support Team tarafından detaylı olarak incelenmesi gerekir. Semptom: Hata Kodu > 5006 Hata Tipi > CreateApiRequestNotSuccess Çözüm: Hata, talep ve yanıt objelerinde bir hata olmaksızın kimlik doğrulama işleminin başarısız olduğuna işaret eder. Talebin gittiği ve yanıtın verildiği sunuculardaki saatlerin eşleşmemesinden(expired olmuş geçersiz ApiTokenKey gönderilmesi gibi) kaynaklanabilir. Sunucular arasında saat senkronizyonu yapılarak hata giderilebilir. Semptom: Hata Kodu > 5007 Hata Tipi > GlobalInitError Çözüm: “System.NullReferenceException: Object reference not set to an instance of an object.” hata başlığını döndürür. Lisanslı domainin, çalışan domainle eşleşmediğinde, sistem ayarlarına erişilemediğinden uygulamanın “Init” metodu çalışmaz bu bu istisna yaratılır. Text loglarına bakılarak ve Web.config dosyasından “ASPStateCustomDomain” parametresi uygun hale getirilerek sorun giderilir. Semptom: Hata Kodu > 5008 Hata Tipi > GlobalInitSettingListNullError Çözüm: Uygulamanın initialize edilemediği durumlarda oluşabilir. Herhangi bir sebepten “dbo.ASPState_Setting” tablosunda ilgili domaine ait ayar verileri(Setting item) bulunmadığında(Count=0 durumunda) veya “ASPStateLib.Model.GlobalModel.SettingList” üyesi null olduğunda bu hata döndürülür. “dbo.ASPState_Setting” tablosunda ilgili domaine ait kayıtların olduğundan emin olunması gerekir. Semptom: Hata Kodu > 5009 Hata Tipi > GeneralExceptionError Çözüm: Enumerasyonlar(ASPStateLib.Enum.LogMsgType) arasında ön tanımlı olmayan hata oluştuğunda döndürülen istisnalardır. Hata detayları incelenerek çözüm üretilmesi gerekir. Bu hatalar log dizinine kayıt edilebilir. Semptom: Hata Kodu > 5010 Hata Tipi > LicenseCodeError Çözüm: Girilen lisans kodunuz yanlış, doğru format olmadığı veya kök domain ile eşleşmediği durumlarda ortaya çıkar. Single domain olarak tahsis edilmiş lisansların tümü www yönlendirmesi ile kullanılabilir. mywebsite.com için tahsis edilmiş bir lisans kodu http://www.mywebsite.com, http://mywebsite.com, https://www.mywebsite.com, https://mywebsite.com adreslerinde çalışacak, http://test.mywebsite.com gibi tanımsız alan adlarında(alt alan adları da dahil) kullanıldığında istisna oluşturacaktır. Alt alan adı(subdomain) kısıtlaması olmadan kullanılan Wilcard tipi lisansta ise uygulama ön tanım yapılmaksızın tüm alt adlarında çalışacaktır. Lisans süresinin sona ermesiyle şu prosedürler sistem tarafından uygulanır: ­ Trial lisans ise, uygulama açılmaz her talepte istisna oluşturur. ­ Lisans satın alınmış ise, taleplerde herhangi bir istisna oluşturulmaz hata kaydı oluşmaz. Lisans süresi geçse bile sistem normal çalışmaya devam eder. Sadece sistem loglarına sistem her initialize edildiğinde yine 5010 hata koduyla lisans hatası kaydı gönderilir. Semptom: Hata Kodu > 5011 Hata Tipi > SystemNetWebClientError Çözüm: “ASPStateManager.Common.UtilityManager.WebRequestResult” metodunda üretilen bir istisnadır. “In parameter” olarak belirtilen “url” parametresinde execute edilen bağlantıdan beklenen “200­OK” durumunun dışında bir yanıt geldiğinde bu hata oluşur. Loglara, karşı sunucunun verdiği hata tanımı da(description) kayıt edilir. Bu hata tanımı incelenerek mümkünse yanıtı gönderen sunucu yöneticisiyle kontakt suretiyle hata çözülebilir. Ayrıca bu hatanın diğer bir sebebide sunucu network çıkışının bulunmaması/kapatılması olabilir. Network bağlantısı veya firewall gibi donanımlardan yanıt alınıp alınmadığı kontrol edilebilir. Güncel troubleshooting kaynakları ve detaylı anlatımlar için www.aspstate.com web sitesini ziyaret edebilirsiniz. 6. Copyright © 2014 ASPState. Her hakkı saklıdır. URL ve diğer Internet Web sitesi başvuruları dahil olmak üzere bu belgedeki bilgiler, önceden haber verilmeksizin değiştirilebilir. Aksi belirtilmedikçe, örnek şirketler, tasvir kuruluşlar, ürünler, etki alanı adları, e­posta adresleri, logolar, kişi ve yer isimleri değiştirilebilir ve bu isimler belirli bir kişi veya kuruluşu hedef almamaktadır. Tüm telif hakkı yasalarına uymak kullanıcının sorumluluğundadır. Telif hakkı kapsamındaki haklar saklı kalmak kaydıyla, bu belgenin bir bölümü veya tamamı, herhangi bir şekilde veya herhangi bir yolla (elektronik ortamda, fotokopi, kayıt veya faks) çoğaltılamaz. Bu belgedeki konularla ilgili patentleri, patent başvuruları, ticari markaları, telif hakları veya diğer fikri mülkiyetı ilgili yayıncıya aittir. Yazılı lisans sözleşmesinde açıkça belirtilmediği sürece, patentler, ticari markalar, telif hakları veya diğer fikri mülkiyeti için herhangi bir lisans verilmez. Bu belgede adı geçen gerçek şirket ve ürün adları, ilgili sahiplerinin ticari markaları olabilir.