Имя: Пароль:
1C
1С v8
Как узнать порт подключения к серверу 1С.
,
0 The_JOhn
 
02.09.15
19:23
День добрый коннекчусь по V83.COMConnector к 1С серверу
Порт нестандартный 2540

Имя базы сервера и базы получаю через СтрокаСоединенияИнформационнойБазы()
но там уже фигурирует порт подключения непосредственно к базе. 2541.

Вопрос, есть ли способ программно узнать порт сервера 1С (2540 который) или придется заводить константу?

Спасибо.
1 Basma4
 
02.09.15
19:58
2 The_JOhn
 
03.09.15
08:06
так мне как раз к нему и надо подключиться. если порт нестандартный, то как его узнать?
3 Лефмихалыч
 
03.09.15
09:12
COMСоединитель = Новый COMОбъект("V83.COMConnector");
СоединениеСАгентомСервера = COMСоединитель.ConnectAgent("TestSrv");

СоединениеСАгентомСервера.GetClusters()// а вот тут все кластеры с их портами
4 Лефмихалыч
 
03.09.15
09:42
а вообще, это называется service discovery. Под это можно заиспользовать DNS, добавив в нее SRV-запись. И потом перед соединением получать хост и порт от службы доменных имет, ни в какие константы этого не записывая.
Внимательный читатель может сказать, что соответствие хост:порт в DNS и фактических значений придется блюсти руками и по сути это технически от константы ни чем не отличается, а просто константа - это dns. Отвечу "да" на оба замечания, но профит в этом все же есть по сравнению с константой.
Но это какой-то дикий лес, руками этого делать я не пробовал, ибо понимаю пока плохо.

Вот так добавить:
https://technet.microsoft.com/ru-ru/library/Cc794952(v=WS.10).aspx

Вот так потом прочитать:
nslookup --type=SRV _appsrv1c._tcp


PS _appsrv1c._tcp это придуманная из головы строчка - не надо думать, что это что-то, уже существующее в вашем сервере или еще где-то.
5 oleg_km
 
03.09.15
12:08
(4) Я не нашел в винде API которое позволит создавать записи типа SRV. WMI для данного типа записи почему-то не работает. Пришлось использовать запись типа TXT
6 Лефмихалыч
 
03.09.15
12:43
(5) dnscmd /RecordAdd /help

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

Кроме того, это нужно раз в жизни - можно и руками в АД сделать. Да и понятнее там, я думаю, будет.
7 Лефмихалыч
 
03.09.15
12:43
а, то - не тебе, извини :)
8 Лефмихалыч
 
03.09.15
12:44
(5) а читаешь потом чем? nslookup-ом же или какие-нить wmi есть?
9 oleg_km
 
03.09.15
13:49
(8) ну пишет у меня служба 1С, а читает потом другая прога на C#. Просто если и пишет и читает приложения одной конфигурации 1С, то проще хранить тогда где-нибудь в базе 1С
10 Лефмихалыч
 
03.09.15
13:52
(9) проще технически, да. Но в результате встанет вопрос санации бэкапов и тестовых баз, чтобы горя потом не хапнуть, года тестовая база ломанется в продуктивную среду делать неописуемое зло
11 Лефмихалыч
 
03.09.15
13:54
если вместо протокола использовать ИД окружения, которое как-то вычисляется в полете, то можно добиться того, что продуктивные базы будут запрашивать (например) записи
_1cappsrv._prod
а тестовые
_1cappsrv._dev

если изобрести (а это не сложно) способ вычислять правильно прод и дев в полете.
12 oleg_km
 
03.09.15
14:37
(11) Тоже такое есть.