Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Как организовать обмен с супер сервером?  [new]
misha_shar
Member

Откуда: Казахстан город Алма-Ата
Сообщений: 164
При установке CACHE в настройках указываешь порт суперсервера. Что он из себя представляет и как организовать работу с ним?
18 авг 15, 06:38    [18031706]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать обмен с супер сервером?  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno -> Moscow
Сообщений: 2633
Порт суперсервера, это тот через который идут все прямые подключения к Caché: ActiveX, Studio, CSP Gateway, ODBC/JDBC ну и т.д. в общем все внешние подключения.
18 авг 15, 09:05    [18031983]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать обмен с супер сервером?  [new]
П.С.М.
Member

Откуда: Из СССР
Сообщений: 453
misha_shar
как организовать работу с ним

В дополнение к вышесказанному, вот простой пример для подключения через VisM на шарпе:

using VISMLib;
...
...
string cmd;
VisM vism = new VisM();
vism.SetServer("CN_IPTCP:localhost[1972]:_system:SYS");
vism.ErrorTrap = true;
vism.OnError += vism_OnError;
vism.P0 = "%SYS.Namespace";
vism.P1 = "List";
vism.P2 = "Nsp";
vism.P3 = "";

cmd = "set rs=##class(%ResultSet).%New()";
vism.Execute(cmd);
cmd = "set rs.ClassName=P0";
vism.Execute(cmd);
cmd = "set rs.QueryName=P1";
vism.Execute(cmd);
cmd = "set sc=rs.Execute()";
vism.Execute(cmd);
cmd = "while rs.%Next() { set ^CacheTempCGM($J,rs.Data(P2))=P3 }";
vism.Execute(cmd);
cmd = "k rs,sc";
vism.Execute(cmd);
vism.SetServer("");
...
...
...
void vism_OnError()
{
      vism.Execute("d BACK^%ETN");
}

Ну а если интересует именно спецификация протокола, для подключения на порт суперсервера, то она, насколько я знаю, закрытая. Тут wireshark в помощь и вперед исследовать трафик :)
18 авг 15, 09:58    [18032237]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать обмен с супер сервером?  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2042
П.С.М.,
MSM-Activate по лучше будет с моей точки зрения .
Кода по меньше и читабильность кода по проще.
18 авг 15, 12:05    [18033025]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать обмен с супер сервером?  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2042
А если Cache' на Linux-е можно запустить xinetd.
Будет в смысле тоже какой-то супер сервер...
В gt.m без проблем, даже сами разработчики советуют.
MSM-Activate(и не только) запустили на gt.m через него - все отлично работает.
Через xinetd я запустил Activate даже на GlobalsDB но, там урезанный функционал...
18 авг 15, 12:13    [18033076]     Ответить | Цитировать Сообщить модератору
 Re: Как организовать обмен с супер сервером?  [new]
kalin
Member

Откуда:
Сообщений: 274
П.С.М.
misha_shar
как организовать работу с ним

В дополнение к вышесказанному, вот простой пример для подключения через VisM на шарпе:

using VISMLib;
...
...
string cmd;
VisM vism = new VisM();
vism.SetServer("CN_IPTCP:localhost[1972]:_system:SYS");
vism.ErrorTrap = true;
vism.OnError += vism_OnError;
vism.P0 = "%SYS.Namespace";
vism.P1 = "List";
vism.P2 = "Nsp";
vism.P3 = "";

cmd = "set rs=##class(%ResultSet).%New()";
vism.Execute(cmd);
cmd = "set rs.ClassName=P0";
vism.Execute(cmd);
cmd = "set rs.QueryName=P1";
vism.Execute(cmd);
cmd = "set sc=rs.Execute()";
vism.Execute(cmd);
cmd = "while rs.%Next() { set ^CacheTempCGM($J,rs.Data(P2))=P3 }";
vism.Execute(cmd);
cmd = "k rs,sc";
vism.Execute(cmd);
vism.SetServer("");
...
...
...
void vism_OnError()
{
      vism.Execute("d BACK^%ETN");
}

Ну а если интересует именно спецификация протокола, для подключения на порт суперсервера, то она, насколько я знаю, закрытая. Тут wireshark в помощь и вперед исследовать трафик :)


Ни в коем случае так не делайте. Вам приведен самый медленный способ взаимодействия с СУБД.
На сегодня для себя определил 2 способа:
1. Через CSP шлюз - требует обязательно id сессии
2. Через php-mgwsi - не требует id сессии.
Данные получаются в виде XML или JSON.
Например для DataSet Xe7
 <FDBS Version="11">
 <Manager>
 <TableList>
  <Table> 
 <ColumnList>
 <Column Name="TITLE" DataType="AnsiString" Size="100"/>
 <Column Name="NAME" DataType="AnsiString" Size="150"/>
 <Column Name="PRICE" DataType="AnsiString" Size="10"/>
 <Column Name="TIME" DataType="AnsiString" Size="10"/>
 <Column Name="T" DataType="AnsiString" Size="5"/>
 <Column Name="CODE" DataType="AnsiString" Size="25"/>
 <Column Name="TYPE" DataType="Int32"/>
 </ColumnList>
 <ConstraintList Enforce="False"/>
  <ViewList/>
  <RowList>
   <Row RowID="1" RowState="Unchanged"><Original NAME="xxxxx" CODE="xxx/0.1~AB" PRICE="33700" TIME="56" 
   TITLE="xxxx" T="" TYPE="0"/>
    </Row>
   <Row RowID="2" RowState="Unchanged"><Original NAME="xxxxxx" CODE="111~Bw" PRICE="25000" TIME="70" TITLE="xxxxxxx" T="" TYPE="1"/>
  </Row>
  </RowList>
   </Table>
   </TableList>
    <RelationList/>
   </Manager>
 </FDBS>
12 окт 15, 18:22    [18269123]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить