WEBSERVICE ERROR : Soap Prefix Missing - Consumo do WebService do Protheus
ASP.NET
16/07/2010 por
Jar Jar Binks
Olá Pessoal,
Desenvolvendo uma aplicação .NET que consome um WebService do Protheus obtive o seguinte erro: WEBSERVICE ERROR : Soap Prefix Missing .
Como sempre, isso aconteceu no ambiente de produção, e não no desenvolvimento, o que me levou à extensas pesquisas, graças ao desconhecido. Sem muitas delongas o que acontece é o seguinte:
Por algum motivo, ou configuração específica no cliente( que ainda não descobri) o .NET exige que o WebService em questão esteja com o mesmo Namespace que foi configurado quando a referência ao WS do Protheus foi definida.
Geralmente , creio eu, o pessoal que faz os WS no Protheus não define o Namespace. Já os WS no .NET vêm sempre com o "http://tempuri.org".
Poderia ser "joão", "*", qualquer coisa, desde que se conformizassem.
Então , as soluções são:
1) mude o WebService no Protheus para o mesmo namespace que o .net está requerindo (colocando a tag NAMESPACE "http://LOCALHOST:8888/ws/UM_NAMESPACE_QUALQUER_QUE_SE_CONFORMIZA_COM_O_DOT_NET_" , por exemplo )
#INCLUDE "PROTHEUS.CH"
#INCLUDE "APWEBSRV.CH"
//----------------------------------------------------------------------------//
// Retorna uma string
//----------------------------------------------------------------------------//
WsService Retorna_String Description "Retorna uma String de teste." NAMESPACE "http://LOCALHOST:8888/ws/UM_NAMESPACE_QUALQUER_QUE_SE_CONFORMIZA_COM_O_DOT_NET_"
WsData InfoInicial AS String
WsData Result AS String
WsMethod Retorna_String_TESTE Description "Retorna a String com o conteudo TESTE."
EndWsService
WsMethod Retorna_String_TESTE WsReceive InfoInicial WsSend Result WsService Retorna_String
::Result:="TESTE"
Return (.t.)
2) Fale para a aplicação .NET não exigir namespace algum, no caso de o WS Protheus também não ter namespace.
Isso, pelo que notei, é algo raro, mas se você pretende fazer com que sua aplicação rode em vários ambientes, é uma boa prática a adotar e evitar dores de cabeça futuras. A solução é simples, mas o problema que pode causar é inversamente proporcional.
Acabando com os bla, bla , blás, me despeço.
Abrazz
Comentários sobre o artigo
19/02/2011
por
Orian
la Amigo muito obrigado pelo post.
não enconteri como desativar a obrigatoriedade de namespaces no .NET,
porem gerei novamente o proxy usando a tool wsdl.exe com as seguintes configurações
wsdl.exe /nologo /verbose /namespace:Protheus.Services /out:C:\proxy /protocol:SOAP /language:CS
http://www.XXXXXXX.apw?wsdl
e deu certo tambem ..fica ai uma alternativa
muito abrigado mesmo ajudou demais.!!!
Poste um comentário >>
|