从IIS获取站点状态

时间:2019-09-11 12:58:16

标签: asp.net iis

我正在寻找一种从asp.net应用程序获取iis站点状态的方法。

我尝试从ServerManager对象获取状态,但是它不起作用

            string ConnessioneDB = "server=127.0.0.1;user=userdb;database=reter;password=eLs3qp?4; ";
            var iisManager = new ServerManager();
            MySqlConnection conn = new MySqlConnection(ConnessioneDB);
            conn.Open();
            MySqlCommand truncate = conn.CreateCommand();
            truncate.CommandText = "truncate table hosting_win";
            truncate.ExecuteNonQuery();
            foreach (Site site in iisManager.Sites)
            {
                var hosting = site.Name;
                var stato = site.State;
                if (hosting != "Default FTP Site" && hosting != "Default Web Site" && hosting != "GetIIS")
                {
                    var server_address = new System.Net.WebClient().DownloadString("http://icanhazip.com");
                    var binding = GetSiteBindings(site);
                    string sql_bindings = "";
                    if (binding != null)
                    {
                        foreach (var sitebinding in binding)
                        {
                            if (sitebinding != null)
                            {
                                var bindingInformation = sitebinding.BindingInformation;
                                string result = bindingInformation.Substring(bindingInformation.LastIndexOf(":") + 1);
                                sql_bindings += result + ",";
                            }
                        }
                        MySqlCommand insert = conn.CreateCommand();
                        insert.CommandText = "insert into hosting_win (hosting,server_address,binding,stato) values (@hosting,@server_address,@binding,@stato)";
                        insert.Parameters.AddWithValue("@hosting", hosting);
                        insert.Parameters.AddWithValue("@server_address", server_address);
                        insert.Parameters.AddWithValue("@binding", sql_bindings);
                        insert.Parameters.AddWithValue("@stato", stato);
                        insert.ExecuteNonQuery();
                    }
                }
            }
            conn.Close();


为什么我无法获得网站状态?

1 个答案:

答案 0 :(得分:0)

据我所知,如果您的网站包含FTP站点,它将得到此错误。由于ftp站点没有包含应用程序池。

我建议您先尝试检查该站点是否为ftp站点,然后才能获取站点状态。

有关我的测试演示的详细信息,您可以参考以下代码:

using Microsoft.Web.Administration;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace IISgetStatus
{
    public partial class Status : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var iisManager = new ServerManager();
            string sitedisplay = null;


            foreach (Site site in iisManager.Sites)
            {
                var hosting = site.Name;
                string bindingdisplay = null;
                if (hosting != "ftpsite")
                {
                    var stato = site.State;
                    foreach (Binding binding in site.Bindings)
                    {
                        bindingdisplay = bindingdisplay + "  Binding:\n   BindingInformation: " +
         binding.BindingInformation;
                        if (binding.Protocol == "https")
                        {
                            // There is a CertificateHash and  
                            // CertificateStoreName for the https protocol only.
                            bindingdisplay = bindingdisplay + "\n   CertificateHash: " +
                                binding.CertificateHash + ": ";
                            // Display the hash.
                            foreach (System.Byte certhashbyte in binding.CertificateHash)
                            {
                                bindingdisplay = bindingdisplay + certhashbyte.ToString() + " ";
                            }
                            bindingdisplay = bindingdisplay + "\n   CertificateStoreName: " +
                                binding.CertificateStoreName;
                        }
                        bindingdisplay = bindingdisplay + "\n   EndPoint: " + binding.EndPoint;
                        bindingdisplay = bindingdisplay + "\n   Host: " + binding.Host;
                        bindingdisplay = bindingdisplay + "\n   IsIPPortHostBinding: " + binding.IsIPPortHostBinding;
                        bindingdisplay = bindingdisplay + "\n   Protocol: " + binding.Protocol;
                        bindingdisplay = bindingdisplay + "\n   ToString: " + binding.ToString();
                        bindingdisplay = bindingdisplay + "\n   UseDsMapper: " + binding.UseDsMapper + "\n\n";

                    }
                }


                sitedisplay = sitedisplay + bindingdisplay + "\n";
            }
            Label1.Text = sitedisplay;

        }
    }
}
相关问题