Re[8]: Delphi 7 + SOAP
От: Den1974  
Дата: 28.10.05 21:52
Оценка:
Здравствуйте, Shtirliz, Вы писали:

S>Его нужно сделать. Попробуй.

S>Вот пример моего
S>Клиент:
S>
S>  ITradeData = interface(IAppServerSOAP)
S>    ['{DD6BCD69-BE2F-47A7-9B63-CED004B6711E}']
S>    ....
S>


S>Сервер:

S>
S>  ITradeData = interface(IAppServerSOAP)
S>    ['{69CDFDAD-9CD6-45A1-8E49-AD09F3D66930}']
S>    ....
S>


S>А теперь почувствуй разницу... Или это тока у меня так... Но думаю нет.

S>Удачи.

Сделал импорт, получил файл


unit ICentimeterInch1;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

  TCurrency            = class;                 { "urn:CentimeterInchIntf" }

  TCurrency = class(TRemotable)
  private
    FExchangeRate: double;
    FName: string;
  public
    property ExchangeRate: Double read FExchangeRate write FExchangeRate;
    property Name: string read FName write FName;
  end;

  ICentimeterInch = interface(IInvokable)
  ['{09FE3389-9018-EA11-C830-E3BDFBB2B4C4}']
    function  Cm2Inch(const Inch: Double): Double; stdcall;
    function  Inch2Cm(const Cm: Double): Double; stdcall;
    function  GetCurrency(const aCurrency: TCurrency): TCurrency; stdcall;
  end;

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


implementation

function GetICentimeterInch(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): ICentimeterInch;
const
  defWSDL = 'http://localhost/project1.exe/wsdl/ICentimeterInch';
  defURL  = 'http://localhost/project1.exe/soap/ICentimeterInch';
  defSvc  = 'ICentimeterInchservice';
  defPrt  = 'ICentimeterInchPort';
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 ICentimeterInch);
    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(ICentimeterInch), 'urn:CentimeterInchIntf-ICentimeterInch', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ICentimeterInch), 'urn:CentimeterInchIntf-ICentimeterInch#%operationName%');
  RemClassRegistry.RegisterXSClass(TCurrency, 'urn:CentimeterInchIntf', 'TCurrency');

end.


Теперь беру интерфейсы от сюда. Ничего не изменилось.
Ты не мог бы кинуть мне на мыло ( samara_den@mail.ru ) исходнички для сервера и клиента (так, чтобы просто перекомпилить и работало)? Я бы наверное сам разобрался.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.