powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос!
34 сообщений из 34, показаны все 2 страниц
Вопрос!
    #39253209
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!
написал небольшую программу по загрузке файла на фтп, все работает, но есть вопрос:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
   class Program
    {
      
        static void Main(string[] args)
        {
            PingServer ps = new PingServer();           
            DateTime dt = DateTime.Now;
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp");
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Credentials = new NetworkCredential("", "");

                StreamReader sourceStream = new StreamReader("");
                byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                sourceStream.Close();
                request.ContentLength = fileContents.Length;

                Stream requestStream = request.GetRequestStream();

                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                if (response.StatusDescription != null)
                {
                    using (StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default))
                    {
                        sw.WriteLine("'Upload File Complete, status {0}'" + dt, response.StatusDescription);
                        sw.Close();
                    }
                }
                else
                              
                response.Close();
                
            }
            catch
            {                
                using (StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default))
                {
                      sw.WriteLine("I can't enter the site !!!WARNING!!!" + " " + dt);
                }
        
            }
        }
       
    }


вот класс, где я проверяю на доступность сервера:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 class PingServer 
    {
        
        public PingServer()
        {
          DateTime dt = DateTime.Now;
          Ping pi = new Ping();
          PingReply pr = pi.Send("");
            if (pr.Status == IPStatus.Success)
	        {
                using (StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default))
                {
                    sw.WriteLine("Server is connecting" + " " + dt);
                    sw.Close();
                }                
            }
            else
            {               
                using( StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default))                   
                {
                    sw.WriteLine("Server is not available!!!WARNING!!!" + " " + dt);
                }                
            }           
        } 
    }



Почему я не могу использовать в классе Program например так:
Код: c#
1.
2.
3.
4.
5.
PingServer ps = new PingServer();
using(ps.sw)
{
lalalalalal + ps.dt;
}


инкапсуляция же... или не все свойства классов можно использовать в сторонних классах?
...
Рейтинг: 0 / 0
Вопрос!
    #39253350
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гуру ООП вы где:)
...
Рейтинг: 0 / 0
Вопрос!
    #39253354
Euvgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так у тебя dt & sw не свойства класса, а локальные переменные в PingServer(). Их дальше этой функции никак
...
Рейтинг: 0 / 0
Вопрос!
    #39253370
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ping'овать сервер перед подключением, бесполезная трата времени, тем более нет ни какой гарантии того, что сервер вообще будет отвечать на ICMP запросы. по этому, лучше это вообще убрать
...
Рейтинг: 0 / 0
Вопрос!
    #39253403
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

Что, достаточно отлавливать ошибку?
...
Рейтинг: 0 / 0
Вопрос!
    #39253413
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Euvgen,

то есть, если я в конструкторе класса объявляю переменные, то в основном классе Program я их не могу использовать,так?
...
Рейтинг: 0 / 0
Вопрос!
    #39253452
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопрос!
    #39253578
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Euvgen,

то есть, если я в конструкторе класса объявляю переменные, то в основном классе Program я их не могу использовать,так?
Область видимости переменных ограничена методом/конструктором.
...
Рейтинг: 0 / 0
Вопрос!
    #39253599
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
скобочками в виде лука для стрельбы стрелами
...
Рейтинг: 0 / 0
Вопрос!
    #39253605
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Спасибо.
...
Рейтинг: 0 / 0
Вопрос!
    #39253609
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
class Program
    {
      
        static void Main(string[] args)
        {
            PingServer ps = new PingServer(); 
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("f");
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Credentials = new NetworkCredential("", "");

                StreamReader sourceStream = new StreamReader("");
                byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                sourceStream.Close();
                request.ContentLength = fileContents.Length;

                Stream requestStream = request.GetRequestStream();

                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                if (response.StatusDescription != null)
                {                   
                    using (ps.sw)
                    {                        
                        ps.sw.WriteLine("Upload File Complete, status {0}" + " " + ps.dd , response.StatusDescription);                        
                    }
                }
                else
                              
                response.Close();
                
            }
            catch
            {                
                using (ps.sw)
                {
                      ps.sw.WriteLine("I can't enter the site !!!WARNING!!!" + " " + ps.dd);
                }
        
            }
             
        }
       
    }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 class PingServer 
    {
        public DateTime dd = DateTime.Now;
        public StreamWriter sw = new StreamWriter(@"", true, System.Text.Encoding.Default);       
        public PingServer()
        {          
          Ping pi = new Ping();
          PingReply pr = pi.Send("");
            if (pr.Status == IPStatus.Success)
	        {              
                using (sw)
                {
                    sw.WriteLine("Server is connecting" + " " + dd);                   
                }                
            }
            else
            {               
                using(sw)                   
                {
                    sw.WriteLine("Server is not available!!!WARNING!!!" + " " + dd);
                }                
            }           
        }        
    }


Почему при запуске он ругается, что "Additional information: Запись в закрытый TextWriter невозможна."?
Я же нигде StreamWriter не закрываю...
PingServer он проходит, ругается уже на ps.sw в Program.
...
Рейтинг: 0 / 0
Вопрос!
    #39253614
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Спасибо.
...
Рейтинг: 0 / 0
Вопрос!
    #39253618
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624, using (ps.sw), using (sw)
...
Рейтинг: 0 / 0
Вопрос!
    #39253639
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

ну так я же вызываю переменную sw из класса PingServer которая, как раз и открывает запись.
если я закоменчу весь конструктор PIngServer, то все отрабатывает с ps.sw.
где тут собака зарыта?:)
...
Рейтинг: 0 / 0
Вопрос!
    #39253687
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624, во что разворачивается using вы знаете?
...
Рейтинг: 0 / 0
Вопрос!
    #39253699
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,

try, finally
Спасибо
...
Рейтинг: 0 / 0
Вопрос!
    #39253711
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624try, finally
Dispose забыли
...
Рейтинг: 0 / 0
Вопрос!
    #39253740
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

да.

Подскажите, например хочу писать лог помимо файла еще и в базу данных.
В таком случае, лучше разделять на потоки методы записи в файл и в базу, или все одним поток делать?
...
Рейтинг: 0 / 0
Вопрос!
    #39253748
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624,

лучше взять готовый логгер (nlog, log4net и т д) и на уровне его конфигурации задавать листенеры , их параметры, формат журнала и т д
...
Рейтинг: 0 / 0
Вопрос!
    #39253749
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624Подскажите, например хочу писать лог помимо файла еще и в базу данных.
В таком случае, лучше

лучше использовать решения типа NLog, в котором многое предусмотрено
...
Рейтинг: 0 / 0
Вопрос!
    #39253797
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
Эдакий зверюга не взлетает наскоком, пошел курить маны...
...
Рейтинг: 0 / 0
Вопрос!
    #39253983
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропиллучше можно взять готовый логгерПоправил.
...
Рейтинг: 0 / 0
Вопрос!
    #39254086
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось настроить пока на запись в файл.
А если я хочу, чтобы на разные ошибки разный Exception вываливал, это я должен все в коде программы учитывать, или как-то в nlog.conf это прописывается?
...
Рейтинг: 0 / 0
Вопрос!
    #39254090
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624ошибки разный Exception
логгер занимается только регистрацией
...
Рейтинг: 0 / 0
Вопрос!
    #39254173
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

Понял, спасибо.
...
Рейтинг: 0 / 0
Вопрос!
    #39255948
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если я хочу, чтобы при недоступности сервера, программа пыталась каждые цать минут сделать свое дело, как лучше это сделать?
сделал так, но кажется это не айс:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
 class Program 
    {
        static int recount = 0;   
        public static void Main(string[] args)
        {            
             UploadFTP();                      
        }    
    
         public static  void UploadFTP()
        {
            Addxml adx = new Addxml();
            PingServer ps = new PingServer();         
             
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("");
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Credentials = new NetworkCredential("", "");

                StreamReader sourceStream = new StreamReader("nts.xml");
                byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                sourceStream.Close();
                request.ContentLength = fileContents.Length;

                Stream requestStream = request.GetRequestStream();

                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                if (response.StatusDescription != null)
                {
                    ps.logger.Error("Upload File Complete, status {0}", response.StatusDescription);
                }

                response.Close();

            }
            catch (Exception ex)
            {
                ps.logger.Error("Upload File don't complete, !!!WARNING!!!", ex.ToString());
                Reconn();
            }          
             
        }
          private static void Reconn() 
          {
              Thread.Sleep(5000000);
              recount = recount + 1;
              while(recount < 10)
              {
                  UploadFTP();
              }
                 
          }      
         
    }
...
Рейтинг: 0 / 0
Вопрос!
    #39256166
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гуру, все же в данной ситуации какой best practice?
или это верное решение?
...
Рейтинг: 0 / 0
Вопрос!
    #39256235
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, читани
retry vs circuit pattern
...
Рейтинг: 0 / 0
Вопрос!
    #39256958
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,

Спасибо.
...
Рейтинг: 0 / 0
Вопрос!
    #39257202
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!
Еще небольшой вопрос:
Настроил nlog на запись и в файл и в базу.
Как правильно сделать отдельную запись в файл, если база для логирования недоступна, или же доступна, но нет возможности записи из-за смены пароля напрмер?
еще раз описать все тоже самое, что для фтп сервера?
Или в nlog есть типа exception при неотработке target/rules?
...
Рейтинг: 0 / 0
Вопрос!
    #39257221
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.s.
можно поменять тему для будущих поисков.
"ftp,xml,nlog"
...
Рейтинг: 0 / 0
Вопрос!
    #39257244
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
mishanya3624p.s.
можно поменять тему для будущих поисков.
"ftp,xml,nlog"
Поменять нельзя, разные вопросы в одной теме задавать нельзя
...
Рейтинг: 0 / 0
Вопрос!
    #39258176
Backs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PallarisВот, читани
retry vs circuit pattern

Меня цитируют, приятно :)
...
Рейтинг: 0 / 0
Вопрос!
    #39258189
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BacksPallarisВот, читани
retry vs circuit pattern

Меня цитируют, приятно :)

Feel the power of IR! :)
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]