簡體   English   中英

從 IIS 檢索綁定信息

[英]Retrieving binding information from IIS

在我的 IIS 設置中有兩個站點: 默認 Web 站點,在該站點下有許多 web 應用程序; 和另一個網站“ABC”。

我正在嘗試從默認 Web 站點中的 web 應用程序獲取 ABC 的綁定信息(協議和端口),但我遇到了障礙。 我確實得到了我需要的信息,但不是從我需要的網站。

據我了解,該信息來自位於 C:\Windows\System32\inetsrv\config 的“applicationHost.config”。 我檢查了這個文件,我可以看到 Default Web Site 和 ABC 作為站點。

這是我用來獲取端口和協議的:

private Dictionary<string, string> GetBindings()
{
    // Get the Site name 
    string siteName = System.Web.Hosting.HostingEnvironment.SiteName;
    //string siteName = "ABC";  //  This does not return any results, but this is what I need info on

    Dictionary<string, string> ret = new Dictionary<string, string>();

    // Get the sites section from the AppPool.config
    Microsoft.Web.Administration.ConfigurationSection sitesSection =
        Microsoft.Web.Administration.WebConfigurationManager.GetSection(null, null, "system.applicationHost/sites");

    foreach (Microsoft.Web.Administration.ConfigurationElement site in sitesSection.GetCollection())
    {
        // Find the right Site
        if (String.Equals((string)site["name"], siteName, StringComparison.OrdinalIgnoreCase))
        {

            // For each binding see if they are http based and return the port and protocol
            foreach (Microsoft.Web.Administration.ConfigurationElement binding in site.GetCollection("bindings"))
            {
                string protocol = (string)binding["protocol"];
                string bindingInfo = (string)binding["bindingInformation"];

                if (protocol.StartsWith("http", StringComparison.OrdinalIgnoreCase))
                {
                    string[] parts = bindingInfo.Split(':');
                    if (parts.Length == 3)
                    {
                        string port = parts[1];
                        ret.Add(protocol, port);
                    }
                }
            }
        }
    }
    return ret;
}

applicationHost.config 包含:

    <sites>
        <site name="Default Web Site" id="1" serverAutoStart="true">
            <application path="/">
                <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
            </application>
            <application path="/AHSTest" applicationPool="DefaultAppPool">
                <virtualDirectory path="/" physicalPath="E:\inetpub\wwwroot\AHSTest" />
            </application>
            <application path="/BCA" applicationPool="DefaultAppPool">
                <virtualDirectory path="/" physicalPath="E:\inetpub\wwwroot\BCA" />
            </application>

<!-- This is the web application my code is in  -->

            <application path="/ABCTools" applicationPool="ABCTools">
                <virtualDirectory path="/" physicalPath="E:\inetpub\wwwroot\ABCTools" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:80:" />
                <binding protocol="net.tcp" bindingInformation="808:*" />
                <binding protocol="net.msmq" bindingInformation="localhost" />
                <binding protocol="msmq.formatname" bindingInformation="localhost" />
                <binding protocol="net.pipe" bindingInformation="*" />
            </bindings>
        </site>

<!-- This is the site I need binding info on: http, port 7070  -->

        <site name="ABC" id="2" serverAutoStart="true">
            <application path="/" applicationPool="ABC">
                <virtualDirectory path="/" physicalPath="E:\inetpub\wwwroot\ABCWS" />
            </application>
            <application path="/ABCAPI/Services" applicationPool="ABC">
                <virtualDirectory path="/" physicalPath="E:\inetpub\wwwroot\ABCWS\ABCAPI\Services" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:7070:" />
            </bindings>
        </site>
        <siteDefaults>
            <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" />
            <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" />
        </siteDefaults>
        <applicationDefaults applicationPool="DefaultAppPool" />
        <virtualDirectoryDefaults allowSubDirConfig="true" />
    </sites>

我無法理解您的問題,但Microsoft 文檔上的此示例代碼顯示了如何獲取和顯示每個站點的綁定。

_serviceProxy = (TestDemoModuleServiceProxy)
    Connection.CreateProxy(Module, typeof(TestDemoModuleServiceProxy));

// Get the site collection on this server.
SiteCollection siteCollection = _serviceProxy.GetSiteCollection();
string collectiondisplay = null;
collectiondisplay = "There are " + siteCollection.Count.ToString() + " sites:\n\n";
string sitedisplay = null;
foreach (Site site in siteCollection)
{
    sitedisplay = sitedisplay + site.Name + ": ID= " + site.Id + "\n";
    // Display each property of each bindings.
    string bindingdisplay = null;
    foreach (Microsoft.Web.Administration.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;
}
collectiondisplay = collectiondisplay + sitedisplay + "\n";
testLabel.Text = collectiondisplay;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM