O que define se um WebServices eh Assincrono?

Boa noite galera,

Uma duvida: Seria correto afirmar que se o meu contrato de servico define uma operation que eh do tipo one-way, ele se torna assincrono se eu tiver que consumir ele numa determinada tecnologia?

Em outras palavras, gerando o client de consumo deste servico, se de uma forma procedural chamar este servico que poderia demorar uns 30 minutos para executar, o resto do meu codigo executaria sem antes terminar o processamento deste servico? Ou eu teria que definir alguma estratégia/pattern sendo que ao chegar neste serviço, eu o delegasse numa fila de mensageria. Neste ponto, vale lembrar que a execução seria instantânea, porem, o cliente teria que aguardar pelo retorno, correto?

Abracos a todos!!!

WebService não é assíncrono. Neste caso que você citou de a “chamada demorar 30 minutos, e o código do client continuar sendo executado” não aconteceria. O tal do “código client” irá ficar esperando uma resposta (independente do retorno ser um erro, ou o resultado esperado).

Agora… Não entendi se sua necessidade é que a chamada SEJA assíncrona, ou se NÃO seja.

De qualquer forma, caso você queira deixar assíncrono, teriam sim que ser feito através de alguma lógica interna (criação de uma thread… wathever…), como você mesmo comentou.

Não sei se consegui responder exatamente sua dúvida… Bem, qualquer coisa posta ai!

[quote=victor.godinho]WebService não é assíncrono. Neste caso que você citou de a “chamada demorar 30 minutos, e o código do client continuar sendo executado” não aconteceria. O tal do “código client” irá ficar esperando uma resposta (independente do retorno ser um erro, ou o resultado esperado).

Agora… Não entendi se sua necessidade é que a chamada SEJA assíncrona, ou se NÃO seja.

De qualquer forma, caso você queira deixar assíncrono, teriam sim que ser feito através de alguma lógica interna (criação de uma thread… wathever…), como você mesmo comentou.

Não sei se consegui responder exatamente sua dúvida… Bem, qualquer coisa posta ai![/quote]

Na verdade, é perfeitamente possível, sim, que ele seja assíncrono. Basta que o contrato do serviço defina, na verdade, duas operações: a operação que vai receber a chamada, e a operação que vai ser chamada na resposta.

[]´s

Na verdade do ponto de vista lógico não é Assíncrono porque ele responde por padrão empty, vazio para o request. Essa resposta entrentato não é do fluxo de negócio e sim um entendimento que ele recebeu a tarefa e deu ok no processamento.

Mas qualquer operação sem tipo de retorno especificada por um contrato WSDL é assíncrona por padrão !! :slight_smile: Isso é meio ambíguo, mas é assim que funciona.

Quanto à especificação no WSDL, em binding, tente colocar a tag <enableAsyncMapping>true</enableAsyncMapping> do jax-ws, isso deve desacoplar seu client :-).

&lt;bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" wsdlLocaption="http://localhost:7001/SoaExpert?wsdl" xmlns="http://java.sun.com/xml/ns/jaxws"&gt; &lt;bindings node="wsdl:definitions"&gt; &lt;enableAsyncMapping&gt;true&lt;/enableAsyncMapping&gt; &lt;/bindings&gt; &lt;/bindings&gt;

Obrigado a todos pela resposta.

Kenobi, entendi perfeitamente o que você disse.

Somente uma coisa ainda não ficou muito claro pra mim: Do ponto de vista conceitual, WebService cujo contrato não possui um retorno, ele é assincrono? Ele foi feito pra atender este tipo de requisição?

Ou tudo isso envolve uma questão ferramental que seria possível torná-lo assincrono? Por exemplo, delegar para uma fila de mensageria a implementação do serviço ou ainda realizar este tipo de parametrização no framework (client JAX-WS)?

[]s

Sim do ponto de vista conceitual ele sempre será Assíncrono caso não tenha retorno. A implementação, como você irá fazer, é dependente da plataforma que irá utilizar.

Isso nunca terá haver com a utilização de JMS por exemplo. Isso é sua escolha de implementação da definição do “Contrato” - WSDL, que dita as regras do jogo :-).

Ficou claro Kenobi.

Muito obrigado pelo esclarecimento.

[]s a todos!!!