ОБНОВЛЕНИЕ
Этот подход является безусловно самым легким:
http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx
я оставляю свой исходный ответ ниже для потомства.
Мои сервисы склонны иметь класс, который инкапсулирует Таймер, поскольку я хочу сервис проверить равномерно, существует ли какая-либо работа для него, чтобы сделать.
Мы новый класс и вызов StartEventLoop () во время сервисного запуска. (Этот класс мог легко использоваться из консольного приложения также.)
хороший побочный эффект этого дизайна состоит в том, что аргументы, с которыми Вы настраиваете Таймер, могут использоваться для имения задержки, прежде чем сервис на самом деле начнет работать, так, чтобы у Вас было время для присоединения отладчика вручную.
p.s. , Как присоединить отладчик вручную к рабочему процессу...?
using System;
using System.Threading;
using System.Configuration;
public class ServiceEventHandler
{
Timer _timer;
public ServiceEventHandler()
{
// get configuration etc.
_timer = new Timer(
new TimerCallback(EventTimerCallback)
, null
, Timeout.Infinite
, Timeout.Infinite);
}
private void EventTimerCallback(object state)
{
// do something
}
public void StartEventLoop()
{
// wait a minute, then run every 30 minutes
_timer.Change(TimeSpan.Parse("00:01:00"), TimeSpan.Parse("00:30:00");
}
}
Также я раньше делал следующее (уже упомянутый в предыдущих ответах, но с условным компилятором [#if] флаги, чтобы помочь избежать его стреляющий в Сборку конечных версий).
я прекратил делать его этот путь, потому что иногда мы будем забывать создавать в Выпуске и иметь отладчик, прерывают приложение, работающее на клиентской демонстрации (смущающий!).
#if DEBUG
if (!System.Diagnostics.Debugger.IsAttached)
{
System.Diagnostics.Debugger.Break();
}
#endif
Как насчет добавления третьего столбца для уточняющего int?
0 = Меньше
1 = меньше или равно
2 = равно
3 = больше или равно
4 = больше
The easiest, is typically to use predefined values for these cases, for example here, a value of 3.0 means 3% whereby 2.99 means "less than 3%".
Since these "Less than" and "More than" values typically only apply at the ends of the range, such a convention allows handling all filtering and ordering with a single field value,in a standard fashion. The main drawback to this approach is that it implies hard-coding these limit values at the level of the application, for display purposes and such.
The alternative is to introduce a two columns value, with a numeric value and a "qualifier" column which contains a code indicating "exact value" or "Less than" or "more than". While this approach appears to be more generic (and it is, at the level of the display etc.), some hard-coding is often required at the level of the "input".
Если вы не хотите разбить данные на 3 поля, например, less_equal_more (varchar) (<. =,> Или текстовые эквиваленты), измерение (deciaml) (3,5 или любой другой уровень вашего точность) и units_of_measurment (varchar) (например, в процентах или абсолютных в милях или метрах - что угодно) - вы должны хранить в varchar. Но я бы разбил ваши данные - облегчить поисковые запросы.
Я бы посоветовал хранить ваши данные в виде интервалов, т.е. <3% будет [0,3), 3% станет [3,3] и так далее. Это может занять 4 столбца в вашей базе данных, по одному для каждой конечной точки и один для обозначения того, открыт или закрыт интервал в каждой конечной точке. Сохраняйте числовые данные в числовом формате, чтобы вы могли выполнять с ними арифметические операции, кодируйте значения «открыто» и «закрыто» так, как это лучше всего соответствует вашим требованиям доступа и манипуляции.