IIS etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
IIS etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

8 Nisan 2013 Pazartesi

LoadLibraryEx failed on aspnet_filter.dll (ISAPI) (Error - Solution)

Localhost da aldığım bir hata ve çözüm yolu;

LoadLibraryEx çağrısı ISAPI "C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll





Çözüm için;


INETMGR (IIS Manager) üzerinde "ISAPI Filters" kısmında ASP.NET_4.0.30319.0 dışındaki "4.0_" la başlıyan filter dll lerini silelim. (aşağıdaki sarı ile işaretli olanları.)



Ayrıca "ISAPI and CGI Restrictions" bölümünden aşağıdaki gibi v4.0.30319 için izin verilmiş olması gerekmektedir.


7 Mart 2013 Perşembe

Register COM dll on windows 64-bit

Karşılaştığım ve biraz zamanımı alan sorundan bahsedeceğim. 32bit COM dll i, 64bit windows sunucu üzerinde IIS de ASP.NET projesini çalıştırdığımızda aşağıdaki hata ile karşılaşırız.

Retrieving the COM class factory for component with CLSID {...} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Aşağıdaki komut ile COM DLL i sisteme tanıtsanız bile, hata devam etmektedir.


c:\windows\system32\regsvr32.exe < filename >.dll

Sorunu çözmek için IIS - pool tarafında ufak bir işlem ile bu sorunu aşmanız mümkün. "Enable 32 bit applications" özelliğini aktifleştirmek gerekir. 



Sorunumuz böylece çözülmüş olacaktır ;)

iyi çalışmalar...

7 Ağustos 2012 Salı

IIS Site Checker :)

Konumuzda bir kaç kavramdan bahsedeceğim. Bunlardan bahsederken de ufak bir uygulama ile bunu şekillendirelim.
  • IIS de tanımlı olan sitelerin okunması
  • IIS deki sitelere recycle işlemi uygulama
  • Site & Servis 'lerin kontrol edilmesi, html i, mevcut hatayı okuma işlemleri
Ufak bir uygulama yazdım. IIS deki siteleri okuyup, tek tek kontrol etmektedir. Hata veren site olursa, recycle etmektedir.

static void Main(string[] args)
        {
            var iisSiteList = IISManager.GetIISSiteList();
            HttpOp ho = null;
            foreach (SiteInfo si in iisSiteList)
            {
                ho = new HttpOp("http://" + (si.SiteUrl != string.Empty ? si.SiteUrl : "localhost:" + si.Port));
                ho.DownloadSite();
                if (ho.IsSiteDownloaded)
                    Console.WriteLine(si.SiteUrl + " sorunsuz çalışmaktadır");
                else
                {
                    Console.WriteLine((si.SiteUrl != string.Empty ? si.SiteUrl : "localhost:" + si.Port) + " hata çıktı.");
                    IISManager.RecycleSite(si.ApplicationPoolName);
                }
            }
            Console.ReadKey();
        }

IIS üzerindeki sitelere ulaşabilmek için, Microsoft.Web.Administration.dll dosyasını referans olarak eklememiz gerekmektedir. (C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll) ServerManager nesnesi ile sitelere ulaşmak çok kolay. Okuduğum site bilgilerini, kendim oluşturduğum SiteInfo nesneme aktarmaktayım.
    public static List GetIISSiteList()
        {
            List tmpList = new List();
            using (ServerManager manager = new ServerManager())
            {
                var sites = manager.Sites;

                foreach (Site s in sites)
                {
                    SiteInfo a = new SiteInfo();
                    a.SiteName = s.Name;
                    if (s.Bindings.Count > 0)
                    {
                        a.SiteUrl = s.Bindings[0].Host;
                        a.Protocol = s.Bindings[0].Protocol;
                        a.Port = s.Bindings[0].EndPoint.Port;
                    }
                    if (s.Applications.Count > 0)
                      {  a.ApplicationPoolName = s.Applications[0].ApplicationPoolName;
}

                    tmpList.Add(a);
                }
            }
            return tmpList;
        }
Yukardaki kod blogunda siteye atanmış ApplicationPoolName değerinide yakalamaktayız. aşağıdaki kod blogunda ilgili pool değerinin durumuna göre , yeniden başlatma ya da recycle işlemleri yapmaktadır. 
public static void RecycleSite(string poolName)
        {
            using (ServerManager manager = new ServerManager())
            {
                ApplicationPoolCollection applicationPools = manager.ApplicationPools;
                foreach (ApplicationPool pool in applicationPools)
                {
                    if (pool.Name == poolName)
                    {
                        if (pool.State == ObjectState.Stopped)
                        {
                            pool.Start();
                            Console.WriteLine(pool.Name + " sitesi durmus. Yeniden Start edildi.");
                        }
                        else
                        {
                            pool.Recycle();
                            Console.WriteLine(pool.Name + " sitesi recycle edildi.");
                        }
                        manager.CommitChanges();
                        continue;
                    }
                }
                applicationPools.Clear();
                return;
            }
        }
Site , servis gibi http tabanlı web uygulamalarını HttpWebRequest nesnesi ile kolayca GET edebiliriz. Aşağıdaki kod blog u içerisnde nasıl GET edip, kaynak kodlarını, hata kodlarını ayıklandığını gösterilmekte.
 public void DownloadSite()
        {
            StringBuilder sb = new StringBuilder();
            byte[] buf = new byte[8192];

            //try-catch => url yanlis olma durumu, site nin hata verme durumunu kontrol edebilmek icin
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(siteUrl);
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream resStream = response.GetResponseStream())
                    {
                        int count = 0;
                        do
                        {
                            count = resStream.Read(buf, 0, buf.Length);
                            if (count != 0)
                            {
                                sb.Append(Encoding.GetEncoding(65001).GetString(buf, 0, count));
                            }
                        }
                        while (count > 0);
                        resStream.Close();
                        response.Close();
                        isSiteDownloaded = true;
                    }
                }
            }
            catch (WebException e)
            {
                isSiteDownloaded = false;
                htmlError = e;
                try
                {
                    using (StreamReader hataoku = new StreamReader(e.Response.GetResponseStream()))
                    {
                        sb.Append(hataoku.ReadToEnd().ToString());
                    }
                }
                catch (Exception ex) { htmlError = new WebException(ex.Message, ex.InnerException); }
            }
        }



Bu örnekler ile bir çok uygulama türetilebilinir. Özetle IIS e kolayca hükmedebiliyoruz. Hatta bu uygulamayı biraz daha geliştirip, asp.net üzerine taşıyıp, dilediğiniz zaman akıllı telefonla, internet olan her yerden sunucunuzdaki siteleri web (http) üzerinden kontrol edebilir, hükmedebilirsiniz. Kimileri için vazgeçilmez olabilir bu tür sistem :D kendimden biliyorum ...

İnternetteki http protokolundeki herşeyi kontrol edebilir, kaynak kodunu , hatasını elde edebilirsiniz. Kötü niyetli de kullanabilirsiniz aslında :) düşünün threading ile binlerce kez bir siteyi GET etmenizi sağlıyan bir uygulama düşünün :) . Evet hedef site de çok inanılmaz trafik oluşur ve zamanla IIS cevap veremez olur :) tabi sizin network genişliğinize bağlı :) sevmediğiniz sitelere erişimi engelliyebilirsiniz.