11 Nisan 2014 Cuma

Asp.Net webforms ile dinamik subdomain oluşturma


  Sanal subdomain oluşturma ihtiyacı hissedersek ve projemiz webforms ise işimiz biraz sıkıntılı. Ama çaresi yok değil. Google search sırasında webforms örnekli basit kayda değer bir kayıt bulamadım, genelde Mvc çözümleri ve dns servere user32.dll ile yapılan müdahaleler şeklindeydi. Bende diğer kaynaklara göre daha basit olduğunu düşündüğüm çözümü paylaşmak istedim benim gibi sorun yaşayanlar için (:

 Uzatmayalım, "www.domain.com/urun" gibi bir istek geldiği zaman ""www.domain.com/" isimli sitemizin dns ine göre sunucumuz isteği tanıyor ve cevap veriyordu. "test.domain.com" gibi bir isteğin de dns kaydı olmadığı için sunucumuz gelen isteği çözümleyemiyor ve cevap veremiyordu. Burası dikkatimi çekti, çünkü her ne kadar subdomain de olsa istek ".domain.com" olarak bitiyordu ve bu isteği bir yerde yakalayabilmemiz lazımdı. Ampul o an yandı ve olmayan subdomainleri karşılayabilmek için özel bir dns kaydı olabilirmi diye düşündüm. Kısa bir süre sonra sonuca ulaştım.

 Dns kayıtlarınıza "*.domain.com" isimli bir A kaydı daha eklediğiniz zaman gelen tüm subdomain istekleri iis default sayfasına yönleniyor. Yani "hede.domain.com" isimli bir subdomaininiz olmasa bile serveriniz isteğe cevap verebilecek hale geliyor.

 Buraya kadar güzel isteği yakaladık. Şimdi iki seçeneğimiz var.

 1- Sayfayı default pageden alıp gerçek sitemize yönlendireceğiz

 2- İsteği burada işleyeceğiz.

1. seçenek pek doğru sayılmaz,çünkü bir istek için bir iki işlem yürütmüş olacağız. 2. seçenek en mantıklısı. Ancak bu işlemi kullandığınız panellerde yapmanız biraz zor, IIS arayüzüne girip öyle yapmanız gerekli.

Burada işaretli olan site sayfamızın "*.domain.com" dns adresini ekledikten sonra olmayan domainleri karşılayacak olan default sitemiz.


Şimdi 1-Gelişmiş özellikleri tıklıyoruz ve ardından default web sitemizin dizinini gerçek web sitemiz ile değiştiriyoruz. 

Artık Default web sitemiz bizim gösterdiğimiz yerden cevap vermeye başlayacak. Ancak bu ayarları yaparken 2 sitenin de App Poollarının aynı seçenek olmasına dikkat edin.

Ancak istekleri Application_Start olayında işleyemiyoruz, yada henüz bulamadım (: Ama Application_BeginRequest olayında aşağıdaki gibi isteğimizi evire çevire kullanabiliriz.


Bu kadar (: Olabildiğince basit olarak açıklamaya çalıştım, herkese iyi çalışmalar.