3

私の c++ ahadmin アプリケーションを IIS 7 と互換性を持たせようとしています。私のアプリは、(IIS 6 のメタベース プロパティを介して) Web サイトの構成を読み取る必要があります。

構成パスに関する多くの記事を読みましたが、それがどのように機能するかについてはよくわかっていると思いますが、1 つ確信が持てません:

構成を取得するには、MACHINE/WEBROOT/APPHOST/ パスまたは MACHINE/WEBROOT/APPHOST/Default Web サイトをコミットします。

web.config後者は特定のウェブサイトの実体を指し、前者はapplicationHost.config一般的な設定が設定されている一般的なファイルを指していると理解しています。

web.configただし、私のアプリはファイルが存在するかどうかを知りません。

私の質問: このパスに到達したい場合 - 、パスまたはパスObject.ConfiguredObject.Site.Bindingsをコミットする必要がありますか?APPHOSTAPPHOST/Default Web Site

実行時にそれを知るにはどうすればよいですか?

4

2 に答える 2

2

バインディングは常に にコミットしますMACHINE/WEBROOT/APPHOST

次のスキーマ ファイルを参照してください。

%systemroot%\System32\inetsrv\config\schema

これらは、設定がどこに属するべきかを特定するのに役立ちます。

アップデート:

あなたのコメントごと:

たとえば、AccessSSLFlags は ConfigurationSection.AccessSection.SslFlags にマップされます。この場合、どのセクションをコミットしますか? どのセクションをコミットする必要があるかを知るにはどうすればよいですか?

それはすべて依存します。IIS7 は、Feature Delegationと呼ばれるメカニズムをサポートしています。機能が委任されている場合、これは、ユーザーがローカルでその機能を構成できることを意味しますweb.config。一部の機能は で構成されsystem.webServer、その他は で構成されますsystem.web

ユーザーがローカルで構成できるものとできないものはweb.config、次の 2 つのファイルのエントリによって制御されます。

%systemrooot%\system32\inetsrv\config\administration.config
%systemrooot%\system32\inetsrv\config\applicationHost.config

次の IIS7 構成スキーマを参照してください。

%systemroot%\System32\inetsrv\config\schema\IIS_schema.xml

セクションには主に 2 つのタイプがあります。

system.applicationHost/xxxx
system.webServer/xxxx

で構成system.applicationHost可能なものは、通常、ユーザーが変更可能な構成アイテムとは見なされません。実際に開くと、次のapplicationHost.configように表示されます。

<sectionGroup name="system.applicationHost">
  <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
  <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
</sectionGroup>

allowDefinition="AppHostOnly"?に注意してください。これは基本的に、これらの設定は では構成できないことを示していますweb.config

機能の委任がどのように機能するかの範囲は広すぎて回答でカバーできないため、上記のリンク先の記事を読むことをお勧めします.

于 2011-01-24T03:35:42.010 に答える
1

構成を管理するための汎用ツールを構築しようとしているように思われるため、IISマネージャーが従うのと同様のパターンに従うことを検討することをお勧めします。つまり、常に構成を可能な限り深いパスに保存しようとします。これが意味することは、セクションがロックされているかどうかを確認することにより、常に可能な場所にコミットするということです。マネージコード(Microsoft.Web.Administration)を使用しますが、AppHostElement.GetMetadata( "isLocked")を使用してC++から同じデータにアクセスできます。ちなみに、C ++を使用している場合は、AHADMINを直接(WMIなどではなく)使用することを強くお勧めします。特に IAppHostWritableAdminManagerを使用することを強くお勧めします。

したがって、アルゴリズムは、CommitPathを指定されたGetAdminSection構成パスと同じ値に設定します。次に、IsLockedを確認し、最後の「パス部分」を削除して(最後の「/」から始まるトリム)、セクションのロックが解除されている場所が見つかるまでもう一度読みます。それはあなたがそれを保存することができる最も深い場所です。また、system.webセクションの場合は、ある時点でMACHINE/WEBROOTに切り替える必要があります。IsLockedは、セクション定義で場所を許可するなど、必要なものを尊重します。防弾にしたい場合は、属性レベルのロックをチェックする必要もありますが、それはかなり進んでいると思います。

于 2011-01-24T22:42:56.927 に答える