SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 05.06.09 09:27
Оценка:
Делаю так



// 10.4.1.20 - заведомо не верный ip-адрес (нет там сервера)
sqlConStr = @"server=10.4.1.20; database=Hello; uid=Hello; pwd=123; Connect Timeout=2";
SqlConnection sqlConn = new SqlConnection(sqlConStr);
SqlCommand sqlCommand = new SqlCommand("Select * ... ", sqlConn);

sqlCommand.CommandTimeout = 2; // обратите внимание, что и здесь тоже 2 секунды...

// вот здесь ждет примерно 42 секунды... потом выдает исключение
sqlConn.Open();  // а должно по идее ждать всего 2 секунды

sqlDataReader = sqlCommand.ExecuteReader();


что не так?
почему 42 секунды?

Спасибо.
Re: SQLConnection timeout - почему не работает?
От: RushDevion Россия  
Дата: 05.06.09 10:08
Оценка: 3 (1)
A>sqlConStr = @"server=10.4.1.20; database=Hello; uid=Hello; pwd=123; Connect Timeout=2";

Ну, если верить документации, свойство зовется
ConnectionTimeout
Re[2]: SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 05.06.09 11:21
Оценка:
Здравствуйте, RushDevion, Вы писали:

A>>sqlConStr = @"server=10.4.1.20; database=Hello; uid=Hello; pwd=123; Connect Timeout=2";


RD>Ну, если верить документации, свойство зовется

RD>ConnectionTimeout

а не подскажите ссылочку на эту документацию...
а то пишу вот это


A>>sqlConStr = @"server=10.4.1.20; database=Hello; uid=Hello; pwd=123; ConnectionTimeout=2";


а оно исключениями сыпит — нет такого слова (ConnectionTimeout) говорит
Re[3]: SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 05.06.09 11:34
Оценка:
вот так тоже не работет... 42 секунды...


sqlConStr = @"server=10.4.1.20; database=Hello; uid=Hello; pwd=123; Connection Timeout=2";
Re: SQLConnection timeout - почему не работает?
От: OrSol  
Дата: 05.06.09 12:18
Оценка: 3 (1)
Здравствуйте, Axepert, Вы писали:

A>что не так?


У SqlConection свой таймаут который указывается в строке подключения (Connect Timeout )
Re[4]: SQLConnection timeout - почему не работает?
От: RushDevion Россия  
Дата: 05.06.09 12:23
Оценка: 3 (1)
Пробел забыл
Документация
В самом низу
ConnectTimeout does not appear to work
Re[2]: SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 01.07.09 15:03
Оценка:
Здравствуйте, OrSol, Вы писали:

OS>Здравствуйте, Axepert, Вы писали:


A>>что не так?


OS>У SqlConection свой таймаут который указывается в строке подключения (Connect Timeout )



сделал вот так:
server=10.4.1.20; database=Discount; uid=AXE; pwd=0; Connect Timeout=2; Connection Timeout=2


в самой реализации запроса


SqlConnection sqlConn = new SqlConnection(sqlConStr);
SqlCommand sqlCommand = new SqlCommand(SelectCommand, sqlConn);
sqlCommand.CommandTimeout = 2;


И все равно 42 секунды.
ПОЧЕМУ?
Re: SQLConnection timeout - почему не работает?
От: _FRED_ Черногория
Дата: 01.07.09 17:34
Оценка: 3 (1)
Здравствуйте, Axepert, Вы писали:

A>почему 42 секунды?


Сервер локальный или удалённый? Как с локальным работает? Какой протокол по-умолчанию используется для удалённого?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 02.07.09 05:56
Оценка: -1
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Axepert, Вы писали:


A>>почему 42 секунды?


_FR>Сервер локальный или удалённый? Как с локальным работает? Какой протокол по-умолчанию используется для удалённого?


Сервера нет вообще... вы всю тему читали?
Еще раз объясню

сервера к которому подключаюсь заведомо нет!
пытаюсь сделать так, что бы при подключении к несуществующему серверу вылетало по таймауту через 2 секунды, а не через 42 как у меня!

Может я что-то не так делаю?
Или чего-то не понимаю?

Спасибо.
Re[3]: SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 02.07.09 07:38
Оценка:
Здравствуйте, Axepert, Вы писали:

A>Здравствуйте, _FRED_, Вы писали:


_FR>>Здравствуйте, Axepert, Вы писали:


A>>>почему 42 секунды?


_FR>>Сервер локальный или удалённый? Как с локальным работает? Какой протокол по-умолчанию используется для удалённого?


A>Сервера нет вообще... вы всю тему читали?

A>Еще раз объясню

A>сервера к которому подключаюсь заведомо нет!

A>пытаюсь сделать так, что бы при подключении к несуществующему серверу вылетало по таймауту через 2 секунды, а не через 42 как у меня!

A>Может я что-то не так делаю?

A>Или чего-то не понимаю?

в дебаге проверил



sqlConStr="server=10.4.1.20; database=alias; uid=HELLO; pwd=0; Connect Timeout=2; Connection Timeout=2"
SqlConnection sqlConn = new SqlConnection(sqlConStr);
int z = sqlConn.ConnectionTimeout; // здесь z=2


но при конекте все равно 42 секунды. почему?


A>Спасибо.
Re: SQLConnection timeout - почему не работает?
От: HowardLovekraft  
Дата: 02.07.09 07:50
Оценка: 3 (1)
Здравствуйте, Axepert, Вы писали:

A>// вот здесь ждет примерно 42 секунды... потом выдает исключение

A>sqlConn.Open(); // а должно по идее ждать всего 2 секунды

IMHO, не получите вы ожидания строго в 2 секунды. Более того, реальная величина таймаута будет варьироваться от окружения.
Нужно учитывать, что какое-то время будет израсходовано на накладные операции:
— разрешения имени в адрес, если задано имя сервера;
— lookup хоста;
— попытку установки соединения для найденного хоста на заданном порту.

Для примера попробуйте "в лоб" решить задачу определения списка всех открытых портов на всех компьютерах локальной сети, путем перебора адресов и номеров портов на каждом адресе и установки соединения Socket'ом или TcpClient'ом. Скорость будет просто ппц.

Максимально приближенное к заданному время таймаута получится, если сервер "(local)", либо задан IP-адрес сервера и при этом сервер доступен.

Лучше скажите, каую задачу вы пытаетесь решить. Наверняка таймаут — это не самоцель.
Re[3]: SQLConnection timeout - почему не работает?
От: _FRED_ Черногория
Дата: 02.07.09 07:51
Оценка: 3 (1)
Здравствуйте, Axepert, Вы писали:

A>>>почему 42 секунды?


_FR>>Сервер локальный или удалённый? Как с локальным работает? Какой протокол по-умолчанию используется для удалённого?


A>Сервера нет вообще... вы всю тему читали?


Попробуй вместо несуществующего "10.4.1.20" написать "(local)" и посмотри каким долгим будет таймаут в этом случае.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 02.07.09 08:10
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Axepert, Вы писали:


A>>>>почему 42 секунды?


_FR>>>Сервер локальный или удалённый? Как с локальным работает? Какой протокол по-умолчанию используется для удалённого?


A>>Сервера нет вообще... вы всю тему читали?


_FR>Попробуй вместо несуществующего "10.4.1.20" написать "(local)" и посмотри каким долгим будет таймаут в этом случае.


у меня стоит локальный сервер.
я его остановил.
таймаут 3 секунды

ошибка в первом случае была № 53

Ошибка при подключении к серверу. При подключении к SQL Server эта ошибка может быть вызвана тем, что в конфигурации по умолчанию SQL Server не поддерживает удаленные соединения. (поставщик: Поставщик именованных каналов, ошибка: 40 — «Не удалось открыть соединение с SQL Server») (поставщик данных .Net SqlClient).


в данном же случае ошибка № 2


При соединении с сервером произошла ошибка. Эта ошибка при соединении с SQL Server может быть вызвана тем, что в параметрах SQL Server по умолчанию запрещены удаленные соединения. (поставщик: Поставщик именованных каналов, ошибка: 40 — «Не удалось открыть соединение с SQL Server») (поставщик данных .Net SqlClient)


почему так?
Re[2]: SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 02.07.09 08:16
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, Axepert, Вы писали:


A>>// вот здесь ждет примерно 42 секунды... потом выдает исключение

A>>sqlConn.Open(); // а должно по идее ждать всего 2 секунды

HL>IMHO, не получите вы ожидания строго в 2 секунды. Более того, реальная величина таймаута будет варьироваться от окружения.

HL>Нужно учитывать, что какое-то время будет израсходовано на накладные операции:
HL>- разрешения имени в адрес, если задано имя сервера;
HL>- lookup хоста;
HL>- попытку установки соединения для найденного хоста на заданном порту.

HL>Для примера попробуйте "в лоб" решить задачу определения списка всех открытых портов на всех компьютерах локальной сети, путем перебора адресов и номеров портов на каждом адресе и установки соединения Socket'ом или TcpClient'ом. Скорость будет просто ппц.


HL>Максимально приближенное к заданному время таймаута получится, если сервер "(local)", либо задан IP-адрес сервера и при этом сервер доступен.

если сервер доступен то какой же таймаут? Опять чего-то не понимаю?

В моей задаче IP задан четко. все равно 42 сек.

HL>Лучше скажите, каую задачу вы пытаетесь решить. Наверняка таймаут — это не самоцель.


Задача простая.
Заношу данные одновременно на локальный сервер и на online
если связи нет, то пишется только в локальную базу.
при этом не должен ТОРМОЗИТЬ софт.
Re[3]: SQLConnection timeout - почему не работает?
От: HowardLovekraft  
Дата: 02.07.09 08:24
Оценка: 3 (1)
Здравствуйте, Axepert, Вы писали:

A>если сервер доступен то какой же таймаут? Опять чего-то не понимаю?

Доступен хост, но на нем нет SQL-сервера (либо остановлена служба).

A>В моей задаче IP задан четко. все равно 42 сек.

Что значит "четко"?

IP-адрес может быть из диапазона адресов локальной сети, на его lookup тратиться одно время. Может быть из другой подсети (или из внешнего мира) — будет другое время. Зависит от того, есть ли у вас DNS-серверы, как они настроены, есть ли там reverse-lookup и как он работает.

У меня, например, ваш кусок кода отваливается с исключением через 20 секунд.

A>если связи нет, то пишется только в локальную базу.

A>при этом не должен ТОРМОЗИТЬ софт.
Софт? GUI, что ли?
Anyway, вынесите задачу записи данных в удаленную базу в отдельный поток и не мучайтесь с таймаутом.
Re[4]: SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 02.07.09 08:33
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, Axepert, Вы писали:


A>>если сервер доступен то какой же таймаут? Опять чего-то не понимаю?

HL>Доступен хост, но на нем нет SQL-сервера (либо остановлена служба).

Понял спасибо.

A>>В моей задаче IP задан четко. все равно 42 сек.

HL>Что значит "четко"?

10.4.1.20

HL>IP-адрес может быть из диапазона адресов локальной сети, на его lookup тратиться одно время. Может быть из другой подсети (или из внешнего мира) — будет другое время. Зависит от того, есть ли у вас DNS-серверы, как они настроены, есть ли там reverse-lookup и как он работает.


Спасибо понял.

HL>У меня, например, ваш кусок кода отваливается с исключением через 20 секунд.


A>>если связи нет, то пишется только в локальную базу.

A>>при этом не должен ТОРМОЗИТЬ софт.
HL>Софт? GUI, что ли?
HL>Anyway, вынесите задачу записи данных в удаленную базу в отдельный поток и не мучайтесь с таймаутом.

Вообще вся задача сводиться к репликации данных (только данных).
Подскажите стоит использовать встроенную репликацию?
или же просто вынести в отдельный поток отправку данных на другой сервер.

Ну и по теме.
Отключил у себя сеть и попытался запросить данные.
3 секунды...
Вопрос решен. Всем спасибо.
Re[5]: SQLConnection timeout - почему не работает?
От: HowardLovekraft  
Дата: 02.07.09 08:42
Оценка: 3 (1)
Здравствуйте, Axepert, Вы писали:

A>Вообще вся задача сводиться к репликации данных (только данных).

A>Подскажите стоит использовать встроенную репликацию?
A>или же просто вынести в отдельный поток отправку данных на другой сервер.

Если вас устроит конечный результат работы штатных средств репликации SQL-сервера, то почему нет?
Re[6]: SQLConnection timeout - почему не работает?
От: Axepert  
Дата: 02.07.09 08:56
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Здравствуйте, Axepert, Вы писали:


A>>Вообще вся задача сводиться к репликации данных (только данных).

A>>Подскажите стоит использовать встроенную репликацию?
A>>или же просто вынести в отдельный поток отправку данных на другой сервер.

HL>Если вас устроит конечный результат работы штатных средств репликации SQL-сервера, то почему нет?


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