2013-09-26 2 views
1

У меня есть метод 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; } 
} 

Это прекрасно работает, но в настоящее время я выполняю его, нажав кнопку на странице. Это не идеально, потому что кто-то должен помнить, чтобы нажать кнопку для ее выполнения. Возможно ли, пока сайт живет на сервере, чтобы сайт выполнял этот блок кода за кулисами каждые несколько часов?

+1

Установите его как консольное приложение и настройте SQL-задание или задачу Windows. –

ответ

2

Не используйте для этого веб-приложение. Используйте что-то вроде Windows Service или консольного приложения, которое планируется запустить через регулярные промежутки времени.

Веб-приложения предназначены для систем запроса/ответа. Они слушают запросы (например, нажимают кнопку на странице) и активно реагируют на эти запросы. Когда этот ответ отправлен, приложение не работает.

Кроме того, если приложение простаивает много, хост (веб-сервер) может закрыть его как часть управления своими ресурсами. Таким образом, вы не можете полагаться на веб-приложение всегда активно работает. И даже если бы вы могли, ему все равно понадобился бы запрос, чтобы что-то сделать.

Служба Windows всегда работает в фоновом режиме и может использовать Timer для выполнения задачи через равные промежутки времени. Или консольное приложение, которое выполняет задачу, может планироваться для запуска через регулярные промежутки времени. (Например, для планировщика задач Windows.)

+0

Хорошо, сделаю. Можно ли взаимодействовать с System.Web.Security и членством api в консольном приложении? –

+0

@DavidTunnell: Можно загрузить это пространство имен, но контекста веб-приложения там нет. Что вам нужно сделать с этим пространством имен? Консольное приложение не должно аутентифицироваться как веб-пользователь. – David

+0

Я использую его для создания учетных данных пользователя для веб-приложения. –

0

Если у вас есть доступ к серверу, то есть через удаленный рабочий стол, вы можете использовать планировщик задач для выполнения кода так часто, как вам нравится.

Если у вас нет такого доступа, то есть вы находитесь в режиме общего хостинга, большинство крупных хостов (например, discountasp.net) предлагают возможность запланировать загрузку страницы определенный график - это будет самый простой способ сделать это в этом сценарии.

Смежные вопросы