Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / проблема с написанием сервера Web Services / 13 сообщений из 13, страница 1 из 1
24.07.2017, 14:19:56
    #39493968
vovkin1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
Я только учусь писать Web приложения.
Попробовал написать тестовое приложения конвертация валют. Все получилось.
Далее захотел добавить в сервере коннект к БД.
В модуле реализации добавил текст(описание модуля ниже), и клиент выдает ошибку:"не найден указанный модуль"
Что я сделал не так? Какой модуль не найден?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
unit u_Impl;

interface
//uses InvokeRegistry, u_Intrf; 
uses InvokeRegistry, Types, XSBuiltIns, u_Intrf,
ADODB,Provider,DBClient,Classes,SysUtils,ActiveX ;

type
  TEncodeDecode = class(TInvokableClass, IEncodeDecode)
  protected
    function US2RUS(Value: Currency): Currency; stdcall;
    function RUS2US(Value: Currency): Currency; stdcall;
  end;

implementation

{ TEncodeDecode }

function TEncodeDecode.RUS2US(Value: Currency): Currency;
begin
  Result := Value / 30;
end;

function TEncodeDecode.US2RUS(Value: Currency): Currency;
begin
CoInitialize(nil);
try
    with TADOQuery.Create(nil) do
    try
      ConnectionString := 'здесь коннект к БД';
      SQL.Text := 'select * from Table';
      Open;
      Result := RecordCount;
    finally
      Free;
    end;
  finally
    CoUninitialize;
  end;

 // Result := Value * 30;
end;

initialization
  InvRegistry.RegisterInvokableClass(TEncodeDecode);
end.



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
24.07.2017, 15:08:24
    #39494007
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
vovkin1307,

Текст ошибки полностью приведи. В ошибке "не найден модуль" имя модуля тоже присутствует.
...
Рейтинг: 0 / 0
24.07.2017, 15:26:42
    #39494021
vovkin1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
DarkMaster,

вот скриншот ошибки
...
Рейтинг: 0 / 0
24.07.2017, 15:47:04
    #39494039
vovkin1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
DarkMaster,
вот клиентская часть

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
unit U_client;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,IServer2, InvokeRegistry, Rio, SOAPHTTPClient, StdCtrls;

type
  TForm2 = class(TForm)
    Button2: TButton;
    HTTPRIO1: THTTPRIO;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
var
  X:IServer;
  R:Currency;
begin
  X:=HTTPRIO1 as IServer;
  R:=X.US2RUS(StrToCurr(Edit1.Text));
  ShowMessage(CurrToStr(R)+'руб.');
end;

end.



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
unit IServer2;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

  IServer = interface(IInvokable)
  ['{6DFC6BCC-5681-BF19-D2FF-74E314FC1172}']
    function  US2RUS(const Value: Double): Double; stdcall;
  end;

function GetIServer(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IServer;

implementation

function GetIServer(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IServer;
const
  defWSDL = 'D:\autoZ\IServer.xml';
  defURL  = 'http://localhost:8080/cgi-bin/Server.exe/soap/IServer';
  defSvc  = 'IServerservice';
  defPrt  = 'IServerPort';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as IServer);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;


initialization
  InvRegistry.RegisterInterface(TypeInfo(IServer), 'urn:ServerIntf-IServer', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IServer), 'urn:ServerIntf-IServer#%operationName%');

end.
...
Рейтинг: 0 / 0
24.07.2017, 21:38:34
    #39494238
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
Замени X:=HTTPRIO1 as IServer; на GetIServer()
...
Рейтинг: 0 / 0
25.07.2017, 08:15:21
    #39494340
vovkin1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
X-Cite,

Не помогло, та же ошибка(
...
Рейтинг: 0 / 0
25.07.2017, 08:16:50
    #39494341
vovkin1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
X-Cite,

если все закомментарить и по одной строчке раскрывать, то на этой строке возникает ошибка

with TADOQuery.Create(nil) do

видимо что то с ADO
...
Рейтинг: 0 / 0
25.07.2017, 09:12:32
    #39494363
KohrAhr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
vovkin1307,

попробуй написать так:

Код: pascal
1.
2.
3.
4.
5.
6.
	CoInitialize(nil);
	begin
		try .. finally ... end

	end;
	CoUninitialize;



да, именно так, с begin & end
...
Рейтинг: 0 / 0
25.07.2017, 09:51:13
    #39494384
vovkin1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
KohrAhr,

та же ошибка(

а может Апачи не видит пути?
...
Рейтинг: 0 / 0
25.07.2017, 09:55:09
    #39494386
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
vovkin1307X-Cite,
если все закомментарить и по одной строчке раскрывать, то на этой строке возникает ошибка
with TADOQuery.Create(nil) do
видимо что то с ADO
Как вариант включить опцию Use Debug DCU's и пошагово выполнить этот Create, посмотрев какой именно модуль не найден. Но походе что не хватает какого-то драйвера в ADO.
...
Рейтинг: 0 / 0
25.07.2017, 14:37:01
    #39494616
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
alekcvpКак вариант включить опцию Use Debug DCU's и пошагово выполнить этот Create, посмотрев какой именно модуль не найден. Но походе что не хватает какого-то драйвера в ADO.Совет глупый. Ошибка возникает при вызове LoadFromLibrary где-то внутри CreateComObject


vovkin1307,

Запускайте ProcessMonitor и смотрите к каким файлам обращается Ваша программа и почему их не видно
...
Рейтинг: 0 / 0
25.07.2017, 15:43:14
    #39494670
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
vovkin1307,

попробуй после CoInitialize(nil) еще сделать вызов OleInitialize(nil)
...
Рейтинг: 0 / 0
25.07.2017, 16:19:03
    #39494706
vovkin1307
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с написанием сервера Web Services
asutp2,

сделал как советовали в http://www.cyberforum.ru/delphi-networks/thread1343227.html
заработало.
Заморачиваться дальше не стал.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / проблема с написанием сервера Web Services / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]