Служба Windows по сравнению с приложением Windows - лучшая практика

Сначала вы должны заметить, что вы не можете поместить Jalali Date в объект DateTime, вы получите исключение в таких датах, как «1392/02/31».

Таким образом, вы должны обрабатывать свои даты Джалали в виде строки или пользовательского типа DateTime.

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

Это метод расширения для получения персидской даты из объекта DateTime.

    public static string GetPersianDate(this DateTime date)
    {
        PersianCalendar jc = new PersianCalendar();
        return string.Format("{0:0000}/{1:00}/{2:00}", jc.GetYear(date), jc.GetMonth(date), jc.GetDayOfMonth(date));
    }
    //How to use it:
    DateTime d = new DateTime(2014, 05, 21);
    string s = d.GetPersianDate(); //1393/02/31

А затем, когда у вас есть дата Джалали в строковом формате, вот метод расширения, чтобы получить григорианскую дату:

    public static DateTime GetDateTimeFromJalaliString(this string jalaliDate)
    {
        PersianCalendar jc = new PersianCalendar();

        try
        {
            string[] date = jalaliDate.Split('/');
            int year = Convert.ToInt32(date[0]);
            int month = Convert.ToInt32(date[1]);
            int day = Convert.ToInt32(date[2]);

            DateTime d = jc.ToDateTime(year, month, day, 0, 0, 0, 0, PersianCalendar.PersianEra);

            return d;
        }
        catch
        {
            throw new FormatException("The input string must be in 0000/00/00 format.");
        }
    }
    //How to use it:
    string pdate = "1392/02/31";
    DateTime dateFromJalali = pdate.GetDateTimeFromJalaliString(); //{5/21/2014 12:00:00 AM}

А теперь для обработки дополнительных функций:

Название недели:

    public static string GetDayOfWeekName(this DateTime date)
    {
        switch (date.DayOfWeek)
        {
            case DayOfWeek.Saturday: return "شنبه";
            case DayOfWeek.Sunday: return "يکشنبه";
            case DayOfWeek.Monday: return "دوشنبه";
            case DayOfWeek.Tuesday: return "سه‏ شنبه";
            case DayOfWeek.Wednesday: return "چهارشنبه";
            case DayOfWeek.Thursday: return "پنجشنبه";
            case DayOfWeek.Friday: return "جمعه";
            default: return "";
        }
    }
    //How to use it:
    DateTime date = DateTime.Now;
    string wname = date.GetDayOfWeekName();

Название месяца:

    public static string GetMonthName(this DateTime date)
    {
            PersianCalendar jc = new PersianCalendar();
            string pdate = string.Format("{0:0000}/{1:00}/{2:00}", jc.GetYear(date), jc.GetMonth(date), jc.GetDayOfMonth(date));

            string[] dates = pdate.Split('/');
            int month = Convert.ToInt32(dates[1]);

            switch (month)
            {
                case 1: return "فررودين";
                case 2: return "ارديبهشت";
                case 3: return "خرداد";
                case 4: return "تير‏";
                case 5: return "مرداد";
                case 6: return "شهريور";
                case 7: return "مهر";
                case 8: return "آبان";
                case 9: return "آذر";
                case 10: return "دي";
                case 11: return "بهمن";
                case 12: return "اسفند";
                default: return "";
            }

    }
    //How to use it:
    DateTime date = DateTime.Now;
    string mname = date.GetMonthName();
29
задан AlexDrenea 16 June 2009 в 07:48
поделиться

3 ответа

Мои общие практические правила следующие

  • Если он должен работать всегда, это служба.
  • Если его нужно запускать под определенной учетной записью пользователя, Сетевая служба, Локальная система, как правило, это служба (или приложение COM +)
  • Если пользователю нужен некоторый контроль над ним, обычно это приложение области уведомлений.
  • Если ему нужно уведомить пользователя о чем-либо, это приложение области уведомлений.

Самое интересное приходит, когда вам нужно запускать что-то как системную учетную запись, но при этом взаимодействовать с ней. IIS - хороший пример этого, это служба, но администрирование - это приложение - оно должно запускаться при запуске, ему нужен доступ к определенным вещам, к которым пользователь не может получить нормальный доступ (c: \ inetpub), но пользователь должен иметь возможность запускать, останавливать и настраивать его.

23
ответ дан 28 November 2019 в 02:00
поделиться

Однако я считаю, что ваше решение почти правильное, Я бы добавил еще одно условие. Возьмем, к примеру, службу mysqld (в этом случае у вас есть выбор, но большинство людей запускают ее как службу). Он работает как служба, потому что вы хотите получить доступ к службе в любое время через несколько приложений. Важно, чтобы он реагировал на все вызывающие его приложения и сам,

3
ответ дан 28 November 2019 в 02:00
поделиться

Я бы спроектировал приложение как службу, если приложение имеет критическую цель и никогда (или редко) закрывается. Службы Windows предоставляют хорошие возможности восстановления после сбоев, хорошие уведомления (см. Вкладку восстановления в свойстве службы).

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

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

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

5
ответ дан 28 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: