2

WebRole 内に 2 つのサイトがあり、スタートアップ タスクを定義しました。

最初の行は正常に機能し、新しいアプリ プールを作成します。

%WINDIR%\system32\inetsrv\appcmd.exe add apppool /name:"VCPool" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"

ここで、2 番目をこの新しく作成された AppPool に変更したいと思いますが、直後に別の行を追加しても役に立ちません。

%WINDIR%\system32\inetsrv\appcmd.exe set app "WebRole_IN_0_VC/" /applicationPool:"VCPool"

どうやら 2 番目のサイトはまだ準備が整っていないようです。

タスクを 30 秒遅らせる、または appcmd.exe を少し遅らせるにはどうすればよいですか? このスタートアップ タスクの依存関係を作成する方法がない限り、その 2 番目のサイトが稼働しているときにのみ実行されますか?

どんな助けでも大歓迎です、どうもありがとう、

この実行を 30 秒遅らせて、2 番目のサイトが稼働していて変更できることを確認する方法はありますか?

アップデート:

ヒントをありがとう。この件についてさらに調査を行いました。OnStart() イベントを見つけました。

1) しかし、私は Silverlight を使用しており、既存の Web プロジェクトを Cloud Roles プロジェクトでラップしているだけなので、WebRole.cs 自体はありません。それを Silverlight Web プロジェクトに追加して、そこで使用することはできますか? それとも、WebRole プロジェクトをゼロから作成して、Silverlight Web プロジェクトをすべて置き換えるようにすることをお勧めしますか?

2)<Runtime/>サービス定義のタグについては、このように単純に追加すればよいのでしょうか? Webrole が管理者特権で実行された場合、セキュリティ上の影響はありますか?

<WebRole name="WebRole" enableNativeCodeExecution="true" vmsize="ExtraSmall">
    <Runtime executionContext="elevated"/>
    <Sites>
      <Site name="WebRole" physicalDirectory="./WebRole">
      ...
    </Sites>
</WebRole>

3) 最後になりましたが、cmd ファイルまたは実際にはこの行を実行するにはどうすればよいですか?

%WINDIR%\system32\inetsrv\appcmd.exe set site /site.name:"WebRole_IN_0_VC" /[Path='/'].applicationPool:"ASP.NET v4.0" >>Log.txt

OnStart() メソッドで?

4

3 に答える 3

3

これらのタスクを実行するために PowerShell スクリプトを使用して調査できますか。PowerShell にはスレッドをスリープする方法があります。何かのようなもの

バッチファイル

%WINDIR%\system32\inetsrv\appcmd.exe add apppool /name:"VCPool" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"
powershell -command "Set-ExecutionPolicy Unrestricted" 2>> err.out 
powershell .\sleep.ps1 2>> err.out
%WINDIR%\system32\inetsrv\appcmd.exe set app "WebRole_IN_0_VC/" /applicationPool:"VCPool"

私は試していませんが、うまくいくはずです。Powershell の統合については、この投稿を参照してください。

于 2011-11-27T17:36:02.760 に答える
2

あなたが発見したように、サイトは「タスク」セクションの実行後に作成されます。代わりに、「OnStart」イベントからコードを実行してください。その時点でサイトが作成されます。ロールを「昇格」して実行するには、サービス定義ファイルを更新する必要がある場合があります。これは、次のタグを追加することで実行できます。

<Runtime executionContext="elevated"/>

編集済み

さらに質問に答えるには:

1) どんなプロジェクトでも、RoleEntryPoint クラスを追加できるはずです。これを手動で行う必要がある場合があります。

2) ランタイム タグを追加しても、デプロイに重大なリスクが追加されることはありません。

3) コマンドを入れるための cmd ファイル (つまり、OnStart.cmd) を作成し、次のようなコードを使用します。

System.Diagnostics.Process.Start("OnStart.cmd")

ここでプロセスを開始する方法の詳細: http://msdn.microsoft.com/en-us/library/53ezey2s.aspx

于 2011-11-27T19:55:47.723 に答える
1

興味のある方のために... Windows Azure で AppCmd スタートアップ タスクを実行して IIS Web サイトを構成する方法 (Web ロール名でサイトを検索し、Azure の IISConfigurator.exe によってサイト構成が既に作成されているように遅延して実行することを含む) についてブログを書きました。

詳細はこちら: http://mvolo.com/configure-iis-websites-windows-azure-startup-tasks-appcmd/

ありがとう、マイク

于 2012-07-16T17:25:39.673 に答える