1

トラフィックが急増するWebサイトに静的な.htmlページを使用しようとしています。ウェブサイトはMVC3アプリです。静的な.htmlページは、次のようなディレクトリ構造になっています。

approot
|---content
        index.html
    |---staticpages
            page1.html
            page2.html
            page3.html

defaultDocumentをに設定しましweb.config"content/index.html"。プロジェクトに.htmlファイルを含めてアプリをデプロイするだけで、正常に実行されます。

私たちがやりたいのは、すべてのhtmlファイルをblobとしてストレージコンテナーに入れることです。バックグラウンドタスク(WebRoleで実行)は、更新されたファイルを定期的にチェックします。バックグラウンドタスクは、サーバーの起動時に.htmlファイルが存在するかどうか、または更新が必要かどうかも確認します。理想的には、プロジェクトに.htmlファイルを含める必要はなく、サーバーの起動時にストレージからそれらを取得するだけです。

バックグラウンドタスクはファイルをプルダウンし、適切なディレクトリに適切に配置します。ただし、www.mysite.comなどのWebサイトにアクセスしようとすると、IISは403エラーを返します。他の.htmlページのいずれかにアクセスしようとすると、404エラーが発生します。MVCこれは、ローカル開発環境でアプリをテストする場合には発生しません。

でディレクトリブラウジングをオンにするIISと、サイトのディレクトリを取得するときにファイルまたはディレクトリが表示されません。もう一度、www.mysite.comのようなドメインだけを使用します。

プロジェクトに.htmlファイルを含めてからwebrole、ストレージ内の1つを更新しようとすると、ストレージblobからプルされますがIIS、古いページが表示されます。それが問題ではないことを確認するために、ブラウザのキャッシュを削除しました。新しいファイルはサーバー上で正しく更新されています。私はそれを私のローカルマシンにコピーしてその中を調べました、そしてそれは確かに更新されたバージョンです。

したがって、これまでのところ推測できることからAzure caches、Webサイト全体が展開されており、コンテンツの変更が許可されていないように見えます。

変更を強制的に認識する方法はありAzureますか、それとも静的な.htmlページに変更があった場合はいつでも再デプロイを強制されますか?

4

1 に答える 1

1

WebロールをデプロイしてAzureで実行すると、実際にはWebロールの2つのコピーがパッケージ化されます。1つはAppRootの下にあり、もう1つはSitesRootの下にあります。

WebRole.OnStartプロセスはAppRootで実行されますが、実際にはWebサイトはSitesRootのコピーから提供されます。したがって、問題は、コードが正常に実行され、blobストレージからファイルをコピーしていることですが、それらはAppRootの下にあるため、サイトからは見えません。

global.asaxでスレッドを開始してコピーを実行するか、コードを変更してIISにWebサイトへの実際のパスを問い合わせ、そこにファイルをコピーするように変更する必要があります。後者はおそらくより安全なアプローチです。

ローカルエミュレータで実行すると、すべてがメインビルドディレクトリから実行されるため、動作が異なります。

于 2013-01-21T23:17:20.637 に答える