6

Azure に Web ロールがあり、最初の要求を待たずに Application_Start を強制したいと考えています。

サイトで「自動的に開始」プロパティをtrueに設定することができました

Azure WebRole で WCF を自動開始する

ただし、最初のリクエストが来るまで Application_Start は呼び出されません。

ここで重要な何かが欠けているかどうかは正確にはわかりません。サーバーは W2008 R2 で、IIS のバージョンは 7.5 です。

ありがとう!

解決

ここにソリューションコードを配置します。誰かを助けることを願っています。WebRole.cs を追加し、そのコードを配置して 30 秒ごとに ping を実行しました。これは私のエンドポイントであるため、Service.svc を閲覧していることに注意してください。エンドポイントは別のエンドポイントである可能性があります。「Endpoint1」を求めていることに注意してください。複数のエンドポイントがある場合は、その行を確認する必要があります。

public class WebRole : RoleEntryPoint
{        
    public override void Run()
    {            
        var localuri = new Uri( string.Format( "http://{0}/Service.svc", RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint ) );

        while (true)
        {
            try
            {                    
                var request = (HttpWebRequest)WebRequest.Create(localuri);
                request.Method = "GET";
                var response = request.GetResponse();
            }
            catch { }
            System.Threading.Thread.Sleep(30000);
        }            
    }

    public override bool OnStart()
    {               
        return base.OnStart();
    }
}
4

3 に答える 3

3

IIS は、最初の要求が到着したときにのみ開始されます。OnStart回避策は、内部またはRoleEntryPoint子孫から同じ VM に HTTP 要求を送信することです。これはWebRequest、同等のクラスを使用して簡単に行うことができます。

于 2013-01-10T08:12:18.817 に答える
1

WebRole.csにコードを入れて、WebサイトからいくつかのURLを要求することができます。私はそれを試しました、そしてそれは幾分うまくいくようです。しかし、デバッグするのは面倒なので、私はそれを本当に釘付けにすることはありませんでした。

もう1つのオプションは、IISアプリケーションの初期化を使用することです。IIS 7.5では使用できませんが、役割をWindows2012にアップグレードするとIIS8を入手できます(.cscfgでosFamily = "3"を設定します)。

于 2013-01-10T15:43:36.117 に答える
1

ジョルディ、私は最近同じ問題を経験しました。

私のテストに基づいて、 Application_Start() は、WebApp の最初の要求が ISS の場合にのみ呼び出されます。(ページを開かずにデバッグで VS を開始しようとすると (proj/debug のオプションを参照)、Azure で WebApp を実行しない場合も Application_Start() が呼び出されないことがわかります)

WebRole の開始時に何かを行う必要があると思います。コードをWebRole.csに配置してください;) ここで、 OnStart()と OnStop() をオーバーライドして、WebRole の開始時に実行されるコードを配置できます。

この方法を使用して、IIS とは別に、いくつかのスケジュールされたタスクを実行する BakgroundWorker を実行しました。

これが助けになることを願っています。ダビデ。

注: 1 - WebRole.cs がない場合は、プロジェクトのルートに作成し、内部に書き込みます: public class WebRole : RoleEntryPoint { public override bool OnStart() { ...あなたのコード... return base.OnStart( ); } }

2 -コードをデバッグする必要がある場合は、WebAppを "実行プロジェクト" として参照するAzure プロジェクトで VS をデバッグで実行する必要があることに注意してください。そうしないと、WebRole は呼び出されません。

于 2013-01-09T16:46:45.000 に答える