2

IIS 8 (Windows 8) で構成されたサイトの既存のバインドを変更するにはどうすればよいですか? コマンドプロンプトでやろうとしています。

管理者モードでコマンド プロンプトを実行して、新しいバインドを追加できます。

> C:\Windows\System32\inetsrv>appcmd set site /site.name:test /+bindings.[protocol='http',bindingInformation='*:80:mitest']

コマンドプロンプトで私は使用します:

> C:\Windows\System32\inetsrv>appcmd set site "test" /?

SET Binding オプションを表示するには、"SET Binding BY BINDING ID" などのコマンドは存在しません。

私が使用するC#コードで:

string windir = Environment.GetEnvironmentVariable("windir");    
string comando = windir +"\\System32\\inetsrv\\appcmd.exe set site /site.name:test /+bindings.[protocol='http',bindingInformation='*:80:mitest']";

System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + comando);

procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;                
procStartInfo.CreateNoWindow = true;
procStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();

string result = proc.StandardOutput.ReadToEnd();

Console.WriteLine(result);
Debug.WriteLine(result);

そして、「権限が不十分なため、構成ファイルを読み取れません」というエラーが表示されます

しかし、コマンドで変更することはできません。そして、次のステップのコードでバインディングを作成できません。変更してみてください。

4

2 に答える 2

3

質問が古い場合でも、同じ問題があり、APPCMD ツールを使用して次の実用的な解決策を見つけたので、これに答えます。この例では、ホスト ヘッダーを既存の SSL バインディングに追加する方法を示します。

appcmd set site /site.name "SiteName" /bindings.[protocol='https',bindingInformation='*:443:*'].BindingInformation:*:443:NewHostHeader
于 2015-08-28T12:52:47.937 に答える
1

問題を何時間も見直した後、私は自分自身に答えます。アクセス許可のため、C#コードでappcmdを使用することは非常に複雑であると読みました。最後に、ServerManagerクラスを使用しました。まず、プロジェクトでこの dll を参照します。

C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll

次に、コードを使用して AppPools、Sites、または Bindings を操作します。バインディングに ID がない場合は、HashTable (私の場合は「bindingNameBase」) を使用して、ホスト名 (私のプロジェクト/問題で一意) を持つキーを管理できます。

public void EditBinding(int id, SiteBinding siteBinding, string newKeyName)
        {
            using (ServerManager serverManager = new ServerManager())
            {
                if (serverManager.Sites == null)
                    return;

                for (int i = 0; i < serverManager.Sites.Count; i++)
                {
                    if (serverManager.Sites[i].Id == id)
                    {
                        Microsoft.Web.Administration.BindingCollection bindingCollection = serverManager.Sites[i].Bindings;

                        // se elimina el binding
                        Microsoft.Web.Administration.Binding bindingTmp = null;
                        for (int j = 0; j < bindingCollection.Count; j++)
                        {
                            if (bindingCollection[j].Host == bindingNameBase[newKeyName].ToString())
                            {
                                bindingTmp = bindingCollection[j];                                
                                break;
                            }
                        }

                        if (bindingTmp != null)
                        {
                            bindingCollection.Remove(bindingTmp);

                            //se crea de nuevo
                            Microsoft.Web.Administration.Binding binding = serverManager.Sites[i].Bindings.CreateElement("binding");
                            binding["protocol"] = siteBinding.Protocol;
                            binding["bindingInformation"] = string.Format(@"{0}:{1}:{2}", siteBinding.IPAddress, siteBinding.Port.ToString(), siteBinding.HostName);

                            bool existe = false;
                            for (int j = 0; j < bindingCollection.Count; j++)
                            {
                                if (bindingCollection[j].Host == siteBinding.HostName)
                                {
                                    existe = true;
                                    break;
                                }
                            }

                            if (existe == false)
                            {
                                bindingCollection.Add(binding);
                                serverManager.CommitChanges();

                                bindingNameBase[newKeyName] = siteBinding.HostName;
                            }
                        }                        
                    }
                }

サイトは、正しい ID を持つプールを使用する必要があります。そうしないと、アクセス許可に問題があります。

于 2014-05-29T17:30:54.063 に答える