Pergunta

Eu estou tendo um problema com o Delphi 2007 ao tentar consumir um serviço web Eu configurei em Java usando JAX-WS. O serviço web pode ser consumido fina de outro programa Java e de um site C # / ASP.NET 2.0. No entanto, quando tento acessar o mesmo serviço usando o importador WSDL em Delphi 2007 (17-Dez-2007 patch), o serviço web JAX-WS não reconhece qualquer um dos parâmetros que eu estou passando-o e nulos-los.

Eu verifiquei a mensagem SOAP que está sendo passado por Delphi e comparou-o com os outros e eles são praticamente idênticos (com exceção de algumas diminuições de namespace insignificante e um monte de estado de exibição daquele .NET!)

Eu também estive em todo o web (elo mais útil foi do Dr. Bob http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:798 ), mas nenhuma alegria.

Alguém se deparar com isso antes?

TIA.


A saga continua!

Depois de buggering sobre com o objeto HTTPRIO para tentar fazê-lo funcionar eu finalmente desistiu e tentou uma transferência XML direto sobre HTTP. Fail.

OK, então eu construí um testador simples em C # e tentei isso. Funciona sem problemas.

Usando o Fiddler para ver o que estava sendo enviado para trás e para a frente, parecia que a única diferença estava nos namespaces. Mudei os namespaces no envio XML em Delphi e ... funciona!

Esta foi uma amostra do XML original que está sendo gerado pelo WSDLImporter:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <version xmlns="http://path.to.service.com/">
            <input>test</input>
        </version>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

e aqui é o que realmente funciona:

<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:version xmlns:ns2="http://path.to.service.com/">
            <input>test</input>
        </ns2:version>
    </S:Body>
</S:Envelope>

Então, agora que eu sei que isso, eu devo ir sobre como alterar os valores de namespace para o código WSDLImporter? Eu não posso ver nada óbvio nas propriedades HTTPRIO.

TIA

Foi útil?

Solução

HA HA VIVE !!!

Basicamente eu tive que tirar o recomendado

InvRegistry.RegisterInvokeOptions(TypeInfo(ActivityService), ioDocument);

e forçá-lo a usar Sec. 5 codificação. Namespaces são gerados conforme necessário e parâmetros são passados ??para o serviço web Java.

Right, necessidade cerveja, muita cerveja:)

Outras dicas

Você deve apenas comentar esta linha em seu WSDL:

//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument);

Isso é o suficiente ... desfrutar.

Nem a solução para o seu problema, mas eu tinha tido problemas recentemente com o mesmo ambiente. Eu tive que mudar as opções muitas vezes até encontrar o caminho certo para consumir o webservice (escrito em C #).

Verifique:

- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions

Eu bati minha cabeça contra a parede por dois dias, até que eu encontrei este post ... E Cesars dica para verificar THTTPRIO.Converter.Options ... Eu tentei quase tudo, última foi para definir soXXXXHdr para true -> então aconteceu algo estranho, não mais nulos para servidor: O ...

Eu não sei porque essa configuração faz com que valores passar, ele só faz (pelo menos para mim).

Seria ótimo se alguém que realmente entende o que está acontecendo explicaria isso.

A remoção soSendMultiRefObj de Converter.Options ajuda

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top