Webservice no BDS2006
Neste sentido, podemos eventualmente atender alguma questão pontual demandada pelos leitores. Coloque em forma de comentários sua demanda que na medida do possível teremos prazer em atendê-la. Algumas pessoas já solicitam nosso suporte, informalmente, via e-mail. Porém, seria melhor que além do e-mail o comentário sobre a demanda fosse registrado. Pois, dessa forma aproveitamos a resolução do seu problema para conteúdo do blog. Assim, outros que por ventura vierem até nós com problemas semelhantes possam compartilhar da solução sem gerar retrabalho para nós. Conseqüentemente, imagino que nosso conteúdo será mais aderente. Isso é o que de fato nos importa.

No diálogo seguinte selecione ISAPI/NSAPI Dynamic Link Library, e click em “OK”.

Click “Yes” para criar a interface do serviço (WSDL). Veja imagem abaixo:



Na interface declararemos uma função. Digite conforme ilustrado abaixo:
(* Declarando uma funcionalidade no serviço que estamos criando *)
function ZnShowMeTheMoney: WideString; stdcall;
A seguir, veja como ficou a unit “ZnShowMeTheMoneyIntf”.
{ Invokable interface IZnShowMeTheMoney }
unit ZnShowMeTheMoneyIntf;
interface
uses InvokeRegistry, Types, XSBuiltIns;
type
{ Invokable interfaces must derive from IInvokable }
IZnShowMeTheMoney = interface(IInvokable)
['{F002F904-9FD7-401D-80E2-037DFFAA4590}']
{ Methods of Invokable interface must not use the default }
{ calling convention; stdcall is recommended }
(* Declarando uma funcionalidade no serviço que estamos criando *)
function ZnShowMeTheMoney: WideString; stdcall;
end;
implementation
initialization
{ Invokable interfaces must be registered }
InvRegistry.RegisterInterface(TypeInfo(IZnShowMeTheMoney));
end.
type
{ TZnShowMeTheMoney }
TZnShowMeTheMoney = class(TInvokableClass, IZnShowMeTheMoney)
public
(* Na unit de implementação precisamos digitar novamente a assinatura do
método que declaramos na interface "ZnShowMeTheMoneyIntf" *)
function ZnShowMeTheMoney: WideString; stdcall;
end;
implementation
OBS: No BDS temos code insight para declaração de bibliotecas!!!

Vamos implementar o método declarado na seção public de “TZnShowMeTheMoney”.
function TZnShowMeTheMoney.ZnShowMeTheMoney: WideString;
const
ZnMsgConst = 'Here is your Money, U$ %f! Do you can see him? look at the message ... ';
var
RandomValue: Double;
RandomDiv: Integer;
begin
RandomValue := RandomRange(1, 10000);
RandomDiv := RandomRange(1, 7);
RandomValue := (RandomValue / RandomDiv);
Result := Format(ZnMsgConst, [RandomValue]);
end
Agora vamos salvar a aplicação, veja ilustração abaixo:



É Muito rápido, intuitivo e amigável desenvolver serviços RPC baseados em SOAP/XML no DBS2006, desde que você conheça bem três conceitos:
2 - Calling Conventions: Convenções de chamadas (traduziremos assim)- Quando declaramos procedimentos ou funções podemos definir, neste momento, a convenção de chamada através das diretivas: register, pascal, cdecl, stdcall, and safecall.
Por exemplo:
function ZNFuncao(const Xzn, Yzn: Double): Double; cdecl;
function ZNProcedimento(const Xzn, Yzn: Double; var AoutZn: Double); stdcall;
3- Sistemas distribuídos: Também chamado na literatura de objetos distribuídos.
Outros artigos sobre Webservice e Delphi Artigo completo (View Full Post)