3

Microsoft.Web.Administration 名前空間のクラスを使用して、カスタム CGI-Exe のハンドラー マッピング (スクリプト マップ) を Internet Information Server に追加したいと考えています。(簡略化された)コードは次のとおりです。

var serverManager = ServerManager.OpenRemote(serverName);

Configuration webConfig = serverManager.GetWebConfiguration(siteName, appPath);
ConfigurationSection handlersSection = webConfig.GetSection("system.webServer/handlers");

ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
string elementName = cgiFile + " script map appHost added by ACM";
ConfigurationElement addElement = handlersCollection.CreateElement("add");
addElement["allowPathInfo"] = true;
addElement["modules"] = "CgiModule";
addElement["name"] = elementName;
addElement["path"] = cgiFile;
addElement["requireAccess"] = "Execute";
addElement["scriptProcessor"] = Path.Combine(scriptsPath, cgiFile);
addElement["verb"] = "*";

handlersCollection.Add(addElement);
serverManager.CommitChanges();

このコードは、ハンドラー マッピングを IIS のマッピング リストに追加しますが、無効としてマークされます。 IIS マネージャーで無効化されたハンドラー マッピングのスクリーンショット

[操作] ウィンドウから [機能のアクセス許可の編集] を手動で選択し、次のダイアログで [実行] アクセス許可を選択する必要があります。

[機能のアクセス許可の編集] ダイアログのスクリーンショット

ハンドラーの作成中にさまざまな構成オプションを設定するか、機能のアクセス許可をプログラムで編集することにより、ハンドラー マッピングを有効にする方法を知りたいです。

アップデート

このスクリプトの結果として作成された web.config をコピーし、上記のダイアログで実行権限を手動で追加し、結果の web.config を元のものと比較しました。

開始が次のように変更されました。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers accessPolicy="Read, Execute, Script">

ここで、accessPolicy の設定方法を調べる必要があります。しかし、これが特定のハンドラ ノードではなく、ハンドラ ノードに設定されているのはなぜですか?

4

1 に答える 1

3

スタックオーバーフローに関する質問を定式化するだけで役立つ場合があります。これで2日間遊んだ後、質問を投稿してから数時間後に解決策を見つけました。

ハンドラーの accessPolicy を設定する必要がありました。

この行を追加した後、最終的に機能しました:

handlersSection["accessPolicy"] = "Read, Script, Execute";

間違った検索用語を使用したようです。accessPolicy の代わりに「機能のアクセス許可の編集」を探しました。

于 2012-10-18T13:38:20.040 に答える