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!
[img]http://arquivo.devmedia.com.br/forum/imagem/300970-20140205-040721.png[/img]
Como posso resolver isso?
Grato!
Joao Silva
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)