Erro consumindo WebService feito em C# no Delphi 7
Caros, estou consumindo um WebService feito em C# no Delphi 7 e para eu conseguir importar o WSDL eu tive que baixar e usar o WSDLImp.
Pelo que pude notar o problema esta no XML request gerado pelo delphi, abaixo estão o XML gerado pelo HTTPRio e o gerado pelo SoapUI.
o XML request do SOAP é:
<?xml
version="1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ProductInsertUpdate xmlns="http://tempuri.org/">
<productVO xmlns="http://schemas.datacontract.org/2004/07/Vtex.Commerce.WebApps.AdminWcfService.Contracts">
<BrandId>1</BrandId>
<CategoryId>2</CategoryId>
<DepartmentId>1</DepartmentId>
<Description>descricao</Description>
<DescriptionShort>DS</DescriptionShort>
<Id>99990</Id>
<IsActive>false</IsActive>
<IsVisible>false</IsVisible>
<KeyWords>KW</KeyWords>
<LinkId>LinkId99990</LinkId>
<Name>ALTERDATA_99990</Name>
<RefId>refId99990</RefId>
<ReleaseDate>2010-08-22T18:08:34.492Z</ReleaseDate>
<TaxCode>5102</TaxCode>
<Title>Titulo</Title>
</productVO>
</ProductInsertUpdate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> e o RESPONSE me mostar o erro: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="
version="1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ProductInsertUpdate xmlns="http://tempuri.org/">
<productVO xmlns="http://schemas.datacontract.org/2004/07/Vtex.Commerce.WebApps.AdminWcfService.Contracts">
<BrandId>1</BrandId>
<CategoryId>2</CategoryId>
<DepartmentId>1</DepartmentId>
<Description>descricao</Description>
<DescriptionShort>DS</DescriptionShort>
<Id>99990</Id>
<IsActive>false</IsActive>
<IsVisible>false</IsVisible>
<KeyWords>KW</KeyWords>
<LinkId>LinkId99990</LinkId>
<Name>ALTERDATA_99990</Name>
<RefId>refId99990</RefId>
<ReleaseDate>2010-08-22T18:08:34.492Z</ReleaseDate>
<TaxCode>5102</TaxCode>
<Title>Titulo</Title>
</productVO>
</ProductInsertUpdate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> e o RESPONSE me mostar o erro: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="
Pedro Souza
Curtidas 0
Respostas
Marco Salles
22/08/2010
No Delphi 7 o WDSL foi implementado utilizando o ASP.NET 1.1 . Porém se criarmos Serviços no Asp.Net em versão superiores as regras mudaram um pouco.
Algums incompatibilidades podem serem corrigidas usando um Artificio ...
Este artificio é especificar o ioDocument como InvokeOptions para o tipo de interface SOAP, como segue:
InvRegistry.RegisterInvokeOptions (TypeInfo (xxx), ioDocument);
Onde xxx é o nome do seu tipo de interface SOAP.
Essa linha de código precisa ser adicionado à seção de inicialização da unidade de importação gerado Win32.
InvRegistry.RegisterInvokeOptions (TypeInfo (xxx), ioDocument);
Onde xxx é o nome do seu tipo de interface SOAP.
Essa linha de código precisa ser adicionado à seção de inicialização da unidade de importação gerado Win32.
GOSTEI 0
Pedro Souza
22/08/2010
Grato pelo rápido retorno Marco.
Mas já esta assim, veja um trecho da unit gerada pelo WSDLImp.exe:
type
ProductInsertUpdate = class; { "
GOSTEI 0
Marco Salles
22/08/2010
eu nunca utilizei o WSDLImp .. Vc tem certeza desta compatibilidade ???
Porque vc não tenta usar o WSDL do Delphi e adiciona na mão mesmo o Artificio citado
O Caso foi parecido com o seu .
Consulta eu consegui fazer , mas passar parametros não ...
e na epoca eu resolvi com este artificio
GOSTEI 0
Pedro Souza
22/08/2010
Marco, grato pela ajuda, mas eu consegui resolver o problema usando o Delphi 2010.
GOSTEI 0
Marco Salles
22/08/2010
beleza Pedro , como eu disse desde do inicio :
"No Delphi 7 o WDSL foi implementado utilizando o ASP.NET 1.1 . Porém se criarmos Serviços no Asp.Net em versão superiores as regras mudaram um pouco. "
Ja o delphi2010 a compatibilidade é total se não me engano ate o ASP.NET 3.5
GOSTEI 0