Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 1404 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Eu importei o WebService da ANVISA com o Web Service Toolkit do Lazarus:

http://sngpc.anvisa.gov.br/webservice/sngpc.asmx

Para o métoido EnviaArquivoSNGPC ele criou o tipo:

  EnviaArquivoSNGPC_Type = class(TBaseComplexRemotable)
  private
    FEmail : String;
    FSenha : String;
    FArq : TBase64StringRemotable;
    FHashIdentificacao : String;
  private
    function wstHas_Email() : Boolean;
    function wstHas_Senha() : Boolean;
    function wstHas_Arq() : Boolean;
    function wstHas_HashIdentificacao() : Boolean;
  public
    constructor Create();override;
    procedure FreeObjectProperties();override;
  published
    property Email : String read FEmail write FEmail stored wstHas_Email;
    property Senha : String read FSenha write FSenha stored wstHas_Senha;
    property Arq : TBase64StringRemotable read FArq write FArq stored wstHas_Arq;
    property HashIdentificacao : String read FHashIdentificacao write FHashIdentificacao stored wstHas_HashIdentificacao;
  end; 

 

Eu não estou conseguindo usar o parametro 

Arq: TBase64StringRemotable

Pelo que eu pesquisei eu deveria registrar alguma coisa com a propriedade: RegisterAttributeProperty()

Porém não estou tendo êxito

Código da chamada ....

var ClasseSNGPC : sngpcSoap;
    Arquivo : EnviaArquivoSNGPC_Type;
.
.
.
begin
  SYNAPSE_RegisterHTTP_Transport( );
  ClasseSNGPC := wst_CreateInstance_sngpcSoap( );
  Arquivo := EnviaArquivoSNGPC_Type.Create();
  Arquivo.Email := eMail;
  Arquivo.Senha := Senha;
  Arquivo.Arq.EncodedString := StringBase64;
  Arquivo.HashIdentificacao := Hash;
  try
    ClasseSNGPC.EnviaArquivoSNGPC( Arquivo );
  except
    on e: Exception do
      ShowMessage( E.Message );
  end;

 

Mensagem de erro:

 

Service exception :
   Code = "soap:Server"
   Message = "System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.ArgumentNullException: Value cannot be null.
Parameter name: buffer
   at System.Security.Cryptography.HashAlgorithm.ComputeHash(Byte[] buffer)
   at sngpc.sngpc.GetMD5HashFromByte(Byte[] file) in C:\inetpub\wwwroot\sngpc\webservice\sngpc.asmx.cs:line 479
   at sngpc.sngpc.EnviaArquivoSNGPC(String Email, String Senha, Byte[] Arq, String HashIdentificacao) in C:\inetpub\wwwroot\sngpc\webservice\sngpc.asmx.cs:line 902
   --- End of inner exception stack trace ---"

 

Se alguém tiver alguma sugestão...

 

 

 

 

 

 

 

 

  • 3 semanas depois ...
Postado

Eu testei no Delphi 7, mais importando pelo WSDL Importer do Delphi 7.

De inicio, ficou idêntico ao Lazarus, os métodos de consulta funcionavam e o de envio de arquivo não.

E o erro que dava no Delphi 7 era exatamente o mesmo do Lazarus.

Eu localizei a solução para o Delphi 7 nesse tópico:

http://www.activedelphi.com.br/forum/viewtopic.php?p=412350&sid=572ef584ded98979457f777f925abe2d

Acontece que o Importer do Delphi 7 na Initialization, ficava originalmente da seguinte forma:

initialization
  InvRegistry.RegisterInterface(TypeInfo(sngpcSoap), 'http://tempuri.org/', '');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(sngpcSoap), 'http://tempuri.org/%operationName%');
 

Quando o correto seria:

initialization
  InvRegistry.RegisterInterface(TypeInfo(sngpcSoap), 'http://tempuri.org/', '');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(sngpcSoap), 'http://tempuri.org/%operationName%');
  InvRegistry.RegisterInvokeOptions(TypeInfo(sngpcSoap), ioDocument);

Ao adicionar essa última linha, no Delphi 7 o problema foi totalmente resolvido.

Por isso, acredito que o problema possa ser a ausência de algum registro na initialization do Lazarus.

Porém não tenho idéia do que poderia ser.

O Initialization do Lazarus depois de importado pelo Web Service Tool Kit fica da seguinte forma:

initialization
  typeRegistryInstance := GetTypeRegistry();

  typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(ValidarUsuario_Type),'ValidarUsuario',[trioqualifiedElement]);
  typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(ValidarUsuarioResponse),'ValidarUsuarioResponse',[trioqualifiedElement]);
  typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(EnviaArquivoSNGPC_Type),'EnviaArquivoSNGPC',[trioqualifiedElement]);
  typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(EnviaArquivoSNGPCResponse),'EnviaArquivoSNGPCResponse',[trioqualifiedElement]);
  typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(ConsultaDadosArquivoSNGPC_Type),'ConsultaDadosArquivoSNGPC',[trioqualifiedElement]);
  typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(ConsultaDadosArquivoSNGPCResponse),'ConsultaDadosArquivoSNGPCResponse',[trioqualifiedElement]);

É completamente diferente do Delphi 7.

 

 

 

 

  • Este tópico foi criado há 1404 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.