![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сервис + приложение (обмен данными)
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 в кач-ве транспортных протоколов.