Здравствуйте, Axepert, Вы писали:
A>// вот здесь ждет примерно 42 секунды... потом выдает исключение A>sqlConn.Open(); // а должно по идее ждать всего 2 секунды
IMHO, не получите вы ожидания строго в 2 секунды. Более того, реальная величина таймаута будет варьироваться от окружения.
Нужно учитывать, что какое-то время будет израсходовано на накладные операции:
— разрешения имени в адрес, если задано имя сервера;
— lookup хоста;
— попытку установки соединения для найденного хоста на заданном порту.
Для примера попробуйте "в лоб" решить задачу определения списка всех открытых портов на всех компьютерах локальной сети, путем перебора адресов и номеров портов на каждом адресе и установки соединения Socket'ом или TcpClient'ом. Скорость будет просто ппц.
Максимально приближенное к заданному время таймаута получится, если сервер "(local)", либо задан IP-адрес сервера и при этом сервер доступен.
Лучше скажите, каую задачу вы пытаетесь решить. Наверняка таймаут — это не самоцель.
Re[3]: SQLConnection timeout - почему не работает?
Здравствуйте, Axepert, Вы писали:
A>>>почему 42 секунды?
_FR>>Сервер локальный или удалённый? Как с локальным работает? Какой протокол по-умолчанию используется для удалённого?
A>Сервера нет вообще... вы всю тему читали?
Попробуй вместо несуществующего "10.4.1.20" написать "(local)" и посмотри каким долгим будет таймаут в этом случае.
Help will always be given at Hogwarts to those who ask for it.
Re[3]: SQLConnection timeout - почему не работает?
Здравствуйте, Axepert, Вы писали:
A>если сервер доступен то какой же таймаут? Опять чего-то не понимаю?
Доступен хост, но на нем нет SQL-сервера (либо остановлена служба).
A>В моей задаче IP задан четко. все равно 42 сек.
Что значит "четко"?
IP-адрес может быть из диапазона адресов локальной сети, на его lookup тратиться одно время. Может быть из другой подсети (или из внешнего мира) — будет другое время. Зависит от того, есть ли у вас DNS-серверы, как они настроены, есть ли там reverse-lookup и как он работает.
У меня, например, ваш кусок кода отваливается с исключением через 20 секунд.
A>если связи нет, то пишется только в локальную базу. A>при этом не должен ТОРМОЗИТЬ софт.
Софт? GUI, что ли?
Anyway, вынесите задачу записи данных в удаленную базу в отдельный поток и не мучайтесь с таймаутом.
Re[5]: SQLConnection timeout - почему не работает?
Здравствуйте, Axepert, Вы писали:
A>Вообще вся задача сводиться к репликации данных (только данных). A>Подскажите стоит использовать встроенную репликацию? A>или же просто вынести в отдельный поток отправку данных на другой сервер.
Если вас устроит конечный результат работы штатных средств репликации SQL-сервера, то почему нет?
Re[2]: SQLConnection timeout - почему не работает?
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Axepert, Вы писали:
A>>почему 42 секунды?
_FR>Сервер локальный или удалённый? Как с локальным работает? Какой протокол по-умолчанию используется для удалённого?
Сервера нет вообще... вы всю тему читали?
Еще раз объясню
сервера к которому подключаюсь заведомо нет!
пытаюсь сделать так, что бы при подключении к несуществующему серверу вылетало по таймауту через 2 секунды, а не через 42 как у меня!
Может я что-то не так делаю?
Или чего-то не понимаю?
// 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[2]: SQLConnection timeout - почему не работает?
Здравствуйте, OrSol, Вы писали:
OS>Здравствуйте, Axepert, Вы писали:
A>>что не так?
OS>У SqlConection свой таймаут который указывается в строке подключения (Connect Timeout )
Здравствуйте, 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[4]: SQLConnection timeout - почему не работает?
Здравствуйте, _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 - почему не работает?
Здравствуйте, 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[4]: SQLConnection timeout - почему не работает?
Здравствуйте, 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[6]: SQLConnection timeout - почему не работает?
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, Axepert, Вы писали:
A>>Вообще вся задача сводиться к репликации данных (только данных). A>>Подскажите стоит использовать встроенную репликацию? A>>или же просто вынести в отдельный поток отправку данных на другой сервер.
HL>Если вас устроит конечный результат работы штатных средств репликации SQL-сервера, то почему нет?
Потому что я не контролирую процесс передачи данных.