powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Шаблон кода
8 сообщений из 8, страница 1 из 1
Шаблон кода
    #38291394
voa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
voa
Гость
Добрый день.

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

Теперь задача. Если при выполнении запроса пропало соединение,
попробовать подключиться несколько раз и если подключение успешно, закончить запрос.

Вот что у меня получилось:
Код: 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.
/*
Любой код
*/

                Int32 attempt = 0;
                while (attempt++ < 2)
                {
                    try
                    {
 /*
 Собственно здесь запрос. Может быть любой код
*/
                        break;
                    }
                    catch (WebException ex)
                    {
                        if ((ex.Status & (WebExceptionStatus.ConnectFailure | WebExceptionStatus.ConnectionClosed)) > 0)
                        {
                            // the connection attempt
                            if (TryAutoLogon())
                            {
                                continue;
                            }
                        }
                        // send exception up
                        throw new WebException(ex.Message, ex);
                    }
                }
/*
Любой код
*/



Это работает.
Проблема в том, что такой код приходится вставлять во множество мест.
Посоветуйте как правильно сделать, чтобы не повторять одно и то же.
...
Рейтинг: 0 / 0
Шаблон кода
    #38291421
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voa,

так пойдёт?
Код: 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.
public static void k1(Action A1,Action A2,Action A3)
{
 A1();
                Int32 attempt = 0;
                while (attempt++ < 2)
                {
                    try
                    {
 A2();
                        break;
                    }
                    catch (WebException ex)
                    {
                        if ((ex.Status & (WebExceptionStatus.ConnectFailure | WebExceptionStatus.ConnectionClosed)) > 0)
                        {
                            // the connection attempt
                            if (TryAutoLogon())
                            {
                                continue;
                            }
                        }
                        // send exception up
                        throw new WebException(ex.Message, ex);
                    }
                }
 A3();
}
...
Рейтинг: 0 / 0
Шаблон кода
    #38291497
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Качаешь entlib 6.0, создаешь своб политику исключений, применяешь RetryPolicy

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
//usage
this.retryPolicy.ExecuteAction(() =>DoAction());

public void DoAction(//)
{
  
  try
{
     //....
}
catch (Exception ex)
{
          Exception exceptionToThrow;
          if (ExceptionPolicy.HandleException(ex, "WebException",out exceptionToThrow))
         {
             if (exceptionToThrow == null)
                throw;
            else
              throw exceptionToThrow;
          }
}
}



Это будет более общий вариант. Изолируешь логику повторов и обработки исключений, если потребуются изменения, то не нужно будет перелопачивать весь код
...
Рейтинг: 0 / 0
Шаблон кода
    #38291532
voa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
voa
Гость
SeVa,

Не могу, нельзя. Можно пользоваться только тем, что есть.
...
Рейтинг: 0 / 0
Шаблон кода
    #38291533
voa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
voa
Гость
beg-in-er,

Спасибо, попробую.
...
Рейтинг: 0 / 0
Шаблон кода
    #38291583
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В угол тебя некому ставить
...
Рейтинг: 0 / 0
Шаблон кода
    #38291609
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaКачаешь entlib 6.0, создаешь своб политику исключений, применяешь RetryPolicy

+100500

Накрайняк можно руками и через аспекты (PostSharp)

Вот обсуждение по сходной тематике


Можно вообще без них, но некрасиво

Код от руки

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class Executer
{
public static void Run(Action action) 
{
	// всяческий дополнительный код, в т.ч. и зацикливание


	try
	{
		action();
	}
	catch 
	{
		// обработка ошибок
	}
}
}



В коде:
Код: c#
1.
Executer.Run(() =>  /* Собственно здесь запрос. Может быть любой код */)
...
Рейтинг: 0 / 0
Шаблон кода
    #38291774
voa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
voa
Гость
Arm79,

Спасибо всем добрым взрослым дядям. Уроки выучил :)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Шаблон кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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