.NET ortamından IIS’i yönetmenin birden fazla yolu vardır. Bunlardan bir tanesi (ve en yenisi) hazır bir kütüphane olan
Microsoft.Web.Administration
’ı kullanmaktır.
Bu kütüphane, sisteminize IIS7 veya yedi buçuk yüklediğiniz zaman otomatik olarak yüklenmektedir. Aşağıdaki adresten bulunarak, referans olarak projenize eklenmektedir:
%WinDir%\System32\InetSrv\Microsoft.Web.Administration.dll
Kapsam
Microsoft.Web.Administration
ile sadece IIS7 ve IIS 7.5’i yönetebilirsiniz. Önceki sürümler için başka yöntemler araştırmalısınız. Bu yazıda onlara değinilmeyecektir.
Anlatımda Visual Studio 2010 ve .NET 4 kullanılacaktır.
Microsoft.Web.Administration Kütüphanesini Projenize Ekleyin
İlk iş kullanacağınız kütüphaneyi referanslar kısmından projenize eklemek. Bu kütüphaneyi IIS’in yüklü olduğu klasörde (%WinDir%\System32\InetSrv)
Microsoft.Web.Administration.dll
ismiyle bulabilirsiniz. Eğer böyle bir klasör bulamıyorsanız, sisteminizde IIS yoktur. IIS yükleyiniz.
Bir başka alternatif de bu dosyayı internetten bulup indirmektir. Ama IIS olmadan kütüphaneyi bulup indirmenizin çok da bir anlamı olmayacağından ilk seçenek daha mantıklıdır.
Kulanın!
Kütüphaneyi sisteminize ekledikten sonra bilgileri çekmek çok kolay! Aşağıdaki kod örneğinde IIS sitelerini, sitelerdeki uygulamaları ve bu uygulamalar/siteler ile ilgili çeşitli bilgileri konsola yazdırıyoruz. Gerekenleri seçim kullanmak size kalmış.
public void IISSiteVeUygulamaBilgileriniYazdir() { try { ServerManager sm = new ServerManager(); foreach (Site site in sm.Sites) { /* Tüm IIS Sitelerini tek tek geziyoruz */ Console.WriteLine("Site ID: " + site.Id); Console.WriteLine("Site Name: " + site.Name); Console.WriteLine("Status: " + site.State.ToString()); Microsoft.Web.Administration.Application applicationRoot = site.Applications.Where(a => a.Path == "/").Single(); VirtualDirectory virtualRoot = applicationRoot.VirtualDirectories.Where(v => v.Path == "/").Single(); Console.WriteLine("Root Path: " + virtualRoot.PhysicalPath); /* Aşağıdaki kısım alıntıdır: http://msdn.microsoft.com/en-us/library/microsoft.web.administration.binding(v=vs.90).aspx#Y311 */ string bindingdisplay = null; foreach (Microsoft.Web.Administration.Binding binding in site.Bindings) { bindingdisplay = bindingdisplay + "BindingInformation: " + binding.BindingInformation; if (binding.Protocol == "https") { // There is a CertificateHash and // CertificateStoreName for the https protocol only. bindingdisplay = bindingdisplay + " CertificateHash: " + binding.CertificateHash + ": "; // Display the hash. foreach (System.Byte certhashbyte in binding.CertificateHash) { bindingdisplay = bindingdisplay + certhashbyte.ToString() + " "; } bindingdisplay = bindingdisplay + " CertificateStoreName: " + binding.CertificateStoreName; } bindingdisplay = bindingdisplay + " EndPoint: " + binding.EndPoint; bindingdisplay = bindingdisplay + " Host: " + binding.Host; bindingdisplay = bindingdisplay + " IsIPPortHostBinding: " + binding.IsIPPortHostBinding; bindingdisplay = bindingdisplay + " Protocol: " + binding.Protocol; bindingdisplay = bindingdisplay + " UseDsMapper: " + binding.UseDsMapper + "\n\n"; } Console.WriteLine("Binding: " + bindingdisplay); /* Alıntı Sonu */ foreach (Microsoft.Web.Administration.Application app in site.Applications) { /* Bir sitenin içindeki tüm uygulamaları tek tek geziyoruz */ Console.WriteLine("AppPath: " + app.Path); Console.WriteLine("ApplicationPoolName: " + app.ApplicationPoolName); Console.WriteLine("EnabledProtocols: " + app.EnabledProtocols); string virtualDirectory = null; foreach (Microsoft.Web.Administration.VirtualDirectory virtua in app.VirtualDirectories) { virtualDirectory += virtua.Path + " (" + virtua.PhysicalPath + ") ; "; } Console.WriteLine("VirtualDirectories: " + virtualDirectory); } } } catch (Exception e) { Console.Write("IIS ile ilgili bir sıkıntı var: " + e.Message + " " + e.StackTrace); } Console.Read(); }
Karşılaşılabilecek Olası Hatalar
Yetki Hatası
Uygulamayı yönetici olarak açın. Geliştirme esnasında da Visual Studio’yu yönetici olarak açın. IIS bilgilerinin okunması için sistem bu yetkilere ihtiyaç duyar.
IIS Yok
Eğer IIS yüklü değilken bu kodu çalıştırırsanız upuzuuuun bir exception fırlatılacaktır.
Program Derlenmiyor
The type or namespace name 'Web' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)
The referenced assembly "Microsoft.Web.Administration, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" could not be resolved because it has a dependency on "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which is not in the currently targeted framework ".NETFramework,Version=v4.0,Profile=Client". Please remove references to assemblies not in the targeted framework or consider retargeting your project.
Bunlara benzer hata alıyorsunuz. Bu, .NET Framework 4 yerine .NET Framework 4 Client Profile kullanmanızdan dolayı kaynaklanıyor. .NET Framework 4 Client profile, .NET Framework’ün sadece bazı özelliklerini barındıran bir alt kümesidir. Kullandığınız Framework’ü değiştirirseniz sorun çözülür.
C# ile IIS7’den Site ve Uygulama Bilgilerini Çekmek bir yorum aldı.
Anlatım için çok teşekkürler bu şekilde düzgün bir kaynak yoktu. 🙂
Lorem Ipsum nedir?
Renk Körleri Web’i nasıl görüyor?
Seçim Adayımız: Medyum Ömer
Türkçede Dil Evrimi
Almanya’da nasıl ehliyet aldım?
Bir şirket neden uzaktan çalışmaya (remote working) izin verir?
-de -da eki ne zaman ayrı yazılır?
Almanya’ya gelmek için yapılan bürokratik işlemler