Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

сервис + приложение (обмен данными)


Страницы:   1 2 3

VirEx(home) ©   (2009-09-14 11:52:00) 

есть сервис (запускаемый допустим с правами system) работающий с SQLite базой

есть приложение (с ограниченными правами), которое должно обмениватся с сервисом информацией:
- добавление данных в базу
- выборка данных из базы
и т.п.

как реализовать "общение" приложения с сервисом?

сервис и приложение работают на одной машине, однако хотелось бы работа с сервисом из удаленной машины в локальной сети


Медвежонок Пятачок   (2009-09-19 00:43:00) [41]

Чудовищно. С большой и жирной буквы "ЧЕ"


VirEx(home)   (2009-09-18 23:06:00) [42]

вопрос по поводу указателей

 TPacked=packed record
   ClientName:PChar;
   Data:PChar;
 end;
 PPacked=^TPacked;

<br>отправка:</br>
var
 P:PPacked;
 Len:integer;
begin
cs.Enter;
new(p);
Len:=SizeOf(TPacked);
getmem(p^.ClientName,Length(self.FNamePipe)*SizeOf(Pchar));
p^.ClientName:=StrPCopy(p^.ClientName,self.FNamePipe);
Inc(Len,Length(self.FNamePipe)*SizeOf(Pchar));
getmem(p^.Data,Length(Data)*SizeOf(Pchar));
p^.Data:=StrPCopy(p.Data,Data);
Inc(Len,Length(Data)*SizeOf(Pchar));

WriteFile(hPipe, p^, Len, dwWritten, nil);

<br>прием:</br>
const
  BUFFERSIZE=4096;

var
FBuf: array[0..BUFFERSIZE] of byte;
s1,s2:string;

begin
ReadFile(FHandle, FBuf, BUFFERSIZE, FBread, nil)

s1:=PPacked(@FBuf)^.ClientName;
s2:=PPacked(@FBuf)^.Data;

в одном приложении такой обмен между пайпами проходит без ошибок, но если из двух разных приложений обмен - выходят каракули :(

подскажите как правильно передать пакет (TPacked)


VirEx(home)   (2009-09-18 20:56:00) [43]

> CreatePipe(FRead,FWrite,nil,0)

от блин :(
опять переделывать


VirEx(home)   (2009-09-18 20:33:00) [44]

> Неужто Апокалипсис завтра после обеда ?
дипломус сдавать через 1,5 недели

еще вопрос знатокам
в отдельном потоке читаю то что клиент послал через
ReadFile(FRead,FBuf,BUFFERSIZE-1, FBread,nil);

как например уведомить его (клиента) что его WriteFile прошел с ошибкой?
возможно есть что-нибудь вроде SendSignal(FRead...)?

FRead это stdin:
CreatePipe(FRead,FWrite,nil,0)


Сергей М.   (2009-09-18 20:19:00) [45]


> осталось мало времени


Неужто Апокалипсис завтра после обеда ?


VirEx(home)   (2009-09-18 19:25:00) [46]

застрял на обмене данными

посоветуйте хороший компонент pipe для чтения/записи данных как клиентской части так и серверной

чтото типа такого:
TPipe=class
public
 function SendString():Boolean;
published
 property OnData(...,var Result:Boolean)

var
server:TPipe;
client:TPipe;
begin
server:=TPipe.Create('.','ServerPipe');
server.OnData:=Form1.OnData;
client:=TPipe.Create('.','ClientPipe');
...
if not client.SendString('ServerPipe',...) then ;
end;

procedure Form1.OnData(...ClientName,var Result:Boolean);
begin
//при установке Result:=False клиент в функции client.SendString() получит отрицательный результат
if ... then Result:=True else Result:=False;
...
SendString(ClientName,...)
end;

либо посоветуйте компонент на сокетах
осталось мало времени :(


Anatoly Podgoretsky   (2009-09-14 16:30:00) [47]

> Сергей М.  (14.09.2009 15:52:11)  [11]

Или бьют через раз и через раз будет удовольствие.


Сергей М.   (2009-09-14 16:02:00) [48]


> с обитой поролоном рукоятью


или сбитым прицелом)


clickmaker   (2009-09-14 15:53:00) [49]

> или бьют они не так больно)

с обитой поролоном рукоятью )


Сергей М.   (2009-09-14 15:52:00) [50]


> но смысл?


Смысл - подсказать автору тропинку, на которой или граблей спрятано поменьше или бьют они не так больно)


KSergey   (2009-09-14 15:36:00) [51]

> Сергей М. ©   (14.09.09 12:28) [9]
> а обращаться к нему, вполне возможно,  придется и не из-под виндовой среды.

Можно много чего нафантазировать за автора, но смысл? :)


Сергей М.   (2009-09-14 12:28:00) [52]


> clickmaker ©   (14.09.09 12:22) [7]


> сервис-то виндозный


Сервис-то виндозный, а обращаться к нему, вполне возможно, придется и не из-под виндовой среды.

Кстати, и виздозный сервис тоже под сомнением в плане перспектив  - а ну как приспичит пользовать его под линухом ? А он уже заточен под  взаимодействие с ним через COM.. Врагу ж не пожелаешь такого геморроя - переделывать все это хозяйство)


Медвежонок Пятачок   (2009-09-14 12:23:00) [53]

http + xml


clickmaker   (2009-09-14 12:22:00) [54]

> [6] Сергей М. ©   (14.09.09 12:21)

то есть? линух что-ли?
ну так сервис-то виндозный


Сергей М.   (2009-09-14 12:21:00) [55]


> clickmaker ©   (14.09.09 12:11) [3]


В лок.сети вполне могут быть и станции, никаким боком не поддерживающие COM.


VirEx(home)   (2009-09-14 12:17:00) [56]

> clickmaker ©   (14.09.09 12:11) [3]

а не сложно это?
а то боюсь застрянуть с разработкой этого дела


Сергей М.   (2009-09-14 12:17:00) [57]

Для лок.сети, возможно, идеальным решением в этом случае будет
http://ru.wikipedia.org/wiki/SOAP


clickmaker   (2009-09-14 12:11:00) [58]

> читаю тут про различные реализации RPC,

а чем не вариант?
если в рамках локальной сети, то можно сервис сделать com-сервером и общаться с ним, просто вызывая методы


VirEx(home)   (2009-09-14 12:08:00) [59]

сервис = подобие шедулера + интерпретатор скриптов + движок работающий с локальной базой, база с корой он работает - хранит скрипты

т.е. сервис сам запускает нужные скрипты по таймеру (предварительно вытаскивая их из базы), а приложение нужно только для добавления/удаления этих сриптов, мониторинга (список запущеных скриптов), и ручного запуска/останова

> Лучшим решением будет использование TCP или UDP в кач-ве транспортных протоколов.
спасибо, а то читаю тут про различные реализации RPC, голову ломаю что взять на вооружение


Сергей М.   (2009-09-14 12:00:00) [60]

Приложению этому что-то мешает работать с СУБД-сервером напрямую ?
Или сервис играет роль App-сервера ?


> хотелось бы работа с сервисом из удаленной машины


Лучшим решением будет использование TCP или UDP в кач-ве транспортных протоколов.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо