1

データベースからユーザー データを取得し、構築中の Web アプリケーションのユーザーのログイン資格情報を作成する ASP.NET メソッドがあります。

    var userDataList = new List<UserInfo>();
    SqlConnection conn = new SqlConnection();
    conn.ConnectionString = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
    try
    {
        //open SQL connection
        conn.Open();
        SqlCommand getSumOfHours = new SqlCommand("SELECT LoginName, Email FROM [User] WHERE Deleted IS NULL", conn);
        //execute command and retrieve primary key from the above insert and assign to variable
        SqlDataReader reader = getSumOfHours.ExecuteReader();
        while (reader.Read())
        {
            userDataList.Add(new UserInfo
            {
                userName = reader.GetString(0),
                email = reader.GetString(1)
            });
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.Write(ex.ToString());
    }
    finally
    {
        conn.Close();
    }

    foreach (var item in userDataList)
    {
        //System.Diagnostics.Debug.WriteLine(item.userName + " " + item.email);
        if (!(Roles.RoleExists("user")))
        {
            Roles.CreateRole("user");
        }
        if (Membership.GetUser(item.userName) == null)
        {
            Membership.CreateUser(item.userName, "password", item.email);
            Roles.AddUserToRole(item.userName, "user");
        }
    }
}
public class UserInfo
{
    public string userName { get; set; }
    public string email { get; set; }
}

それは完全に機能しますが、現在、ページのボタンを押すことで実行しています。これは理想的ではありません。なぜなら、誰かが実行するためにボタンを押すことを覚えていなければならないからです。サイトがサーバー上で稼働している間に、サイトがこのコード ブロックを数時間ごとにバックグラウンドで実行することは可能ですか?

4

2 に答える 2

2

これには Web アプリケーションを使用しないでください。定期的に実行するようにスケジュールされている Windows サービスやコンソール アプリケーションなどを使用します。

Web アプリケーションは、要求/応答システムとして設計されています。リクエスト (ページ上のボタンを押すなど) をリッスンし、それらのリクエストに積極的に応答します。その応答が送信されると、アプリケーションはアイドル状態になります。

さらに、アプリケーションが頻繁にアイドル状態になっている場合、ホスト (Web サーバー) はリソース管理の一環としてアプリケーションをシャットダウンできます。そのため、常にアクティブに実行されている Web アプリケーションに依存することはできません。できたとしても、何かを行うにはリクエストが必要です。

Windows サービスは常にバックグラウンドで実行されており、 を使用しTimerて定期的にタスクを実行できます。または、タスクを実行するコンソール アプリケーションを定期的に実行するようにスケジュールできます。(たとえば、Windows タスク スケジューラによって。)

于 2013-09-26T18:22:16.417 に答える
0

サーバーにアクセスできる場合 (リモート デスクトップなど) は、タスク スケジューラを使用してコードを何度でも実行できます。

そのようなアクセス権がない場合、つまり共有ホスティング設定を使用している場合、ほとんどの大手ホスト (discountasp.net など) は、特定のスケジュールでページをロードするようにスケジュールする機能を提供します -そのシナリオでは、それが最も簡単な方法です。

于 2013-09-26T18:23:19.043 に答える