Fórum Aplicação SOAP com banco de dados #468877

05/02/2014

0

Criei uma aplicação soap com conexão a um banco de dados firebird através de uma aplicação datasnap. criei uma aplicação client para acessar SOAP. na SOAP eu chamo a client class da app datasnap para pegar o valor OLEVARIANT retornado de uma função e passo este valor a um clientdataset na app cliente. porem ta dando o seguinte erro:

[img]http://arquivo.devmedia.com.br/forum/imagem/300970-20140205-040721.png[/img]


Como posso resolver isso?

Grato!
Joao Silva

Joao Silva

Responder

Posts

05/02/2014

Douglas

João, você pode começar analisando, se a comunicação de requisição esta respondendo.
Responder

Gostei + 0

05/02/2014

Joao Silva

Sou novissimo no soap. então la vai:

primeiro fiz uma função de soma na app soap e chamei ela na cliente, deu tudo certo e ainda continua funcionando normalmente.carregara. Em seguida criaeu um MODULESERVER , coloquei um SQLCONNECTION, conectei ele a minha aplicação datasnap-server e gerei sua unit client class proxy para utilizar as funções criadas na datasnap-server. chamei a função que retorna valor OLEVARIANT e passo este valor para o clientdataset na app cliente. É nesta hora que ocorre o erro:
[img:descricao=A Menssagem de erro]http://arquivo.devmedia.com.br/forum/imagem/300970-20140205-104411.png[/img]

unit do MODULESERVER da soap:

Unit ModuloServer;

interface

uses SysUtils, Classes, InvokeRegistry, Midas, SOAPMidas, SOAPDm,
Data.DBXDataSnap, IPPeerClient, Data.DBXCommon, Data.DB, Data.SqlExpr, Vcl.Dialogs;

type
IdmServer = interface(IAppServerSOAP)
['{917F1B4F-051F-46D7-8582-DBB897FB594F}']
Function GetResult(Id:Integer;Nome:String):Boolean; stdCall;
Function GetParcela(pCPF:String):OleVariant; stdCall;
end;

TdmServer = class(TSoapDataModule, IdmServer, IAppServerSOAP, IAppServer)
SQLConnection1: TSQLConnection;
private

public
Function GetResult(Id:Integer;Nome:String):Boolean; stdCall;
Function GetParcela(pCPF:String):OleVariant; stdCall;
end;

implementation

{$R *.DFM}

uses U_PROXY_WS, U_UTEIS;

procedure TdmServerCreateInstance(out obj: TObject);
begin
obj := TdmServer.Create(nil);
end;

{ TdmServer }

function TdmServer.GetParcela(pCPF: String): OleVariant;
Var
loClient : TDSSM_PARCELAClient;
begin
Try
loClient := TDSSM_PARCELAClient.Create(TUtil.GetConn.DBXConnection);
Try
Result := loClient.GetPARCELA( ' AND CL_CPF = '+pCPF + ' AND PA_COMPETENCIA = '+QuotedStr( COPY(DateTimeToStr(Date),4,7) ) );
Finally
loClient.Free;
End;

Except
On e: Exception Do
ShowMessage('Erro '+ e.Message);
End;
end;

function TdmServer.GetResult(Id: Integer; Nome: String): Boolean;
begin
Result := (id = 10) and (Nome = 'jhony' );
end;

initialization
InvRegistry.RegisterInvokableClass(TdmServer, TdmServerCreateInstance);
InvRegistry.RegisterInterface(TypeInfo(IdmServer));
end.



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar