4

Azure WebRole で完全に正常に動作する ASP.NET MVC 4 サイトがあります。ASP.NET MVC プロジェクトは独自に開始されました。その後、Azure クラウド サービス プロジェクトをソリューションに追加し、ASP.NET プロジェクト/サイトをサービスの「役割」の 1 つとして追加しました (したがって、 「ロール」フォルダ)。

私の問題は、ASP.NET MVC プロジェクト内で WebRole.cs ファイルを操作したいということですが、何をしようとしても、展開すると呼び出されないように見えます。OnStart と Run のオーバーライド (私が知っていることですが、決してループを離れてはなりません) - これらは明らかに呼び出されることはありません。

しかし、新しい CloudService プロジェクトを開始し、その時点で最初から ASP.NET MVC プロジェクトを追加すると、自動的に WebRole.cs ファイルが含まれるため、WebRole 用にどこかで何かを構成する必要があると思います。 .cs (実際には、RoleEntryPoint を継承する WebRole クラス) が呼び出されます。それは何でしょうか?

using System;
using System.Web;
//using Microsoft.WindowsAzure.StorageClient;
using System.Diagnostics;
using System.Threading;

namespace Us.WebUI
{
    public class WebRole : Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint
    {
        public override bool OnStart()
        {
            return true; //return base.OnStart(); // CALL THIS???
        }

        public override void Run()
        {
            while (true) {
                Thread.Sleep(TimeSpan.FromSeconds(30));
                try {
                    EmailFuncs.SendEmailToUs("An email from our WebRole?????", "Email me this, email me that.");
                }
                catch { }
            }
        }

    }
}

更新: ありがとう、質問は答えられました。しかし、追加します:これを行うと、明らかに機能していましたが(完全に展開され、エミュレーターで)、サイトの完全な公開を行う際に突然問題が発生しました。Azure の公開に 3 時間かかった後:

ストレージ アカウント 'xyz' を検証しています... > パッケージをアップロードしています... > - 更新しています... [ここに 3 時間滞在]、次のエラーで失敗しました: サーバーで内部エラーが発生しました。要求を再試行してください。私が疑問に思っていたことの 1 つは、WebRole.cs で OnStop をオーバーライドする必要があるかどうかということです。

更新 2: これらの以前の問題は修正されており、この問題とは何の関係もありません。実際、私は次のことを学びました。ビルドで警告が生成された場合、ローカルまたは他のホストで問題が発生していない場合でも、Azure は多くの場合、それらを処理しません。それ以来、私はビルドの警告にもっと熱心に取り組んできました (ただし、これには、無視したい多くの警告タイプを警告コードでオフにすることが重要です!)。

4

1 に答える 1

3

RoleEntryPoint から継承するクラスを Web プロジェクトに追加するだけで十分です。エミュレータにブレークポイントを設定してみましたか?

あなたが経験しているのは、EmailFuncs.SendEmailToUsが app/web.config からの情報を必要とし、この情報が利用できないということです。WebRoleクラスが (Web アプリケーションではなく) 別のプロセスで実行されること、つまり web.config を使用していないことを知っておく必要があります。WebRole.cs が構成ファイルから情報を読み取るようにする場合は、これらの設定をWaIISHost.exe.configに追加する必要があります。

于 2012-10-04T10:56:22.093 に答える