Buscar

Últimas inserções

Gerando planilhas XLS para Excel com formatação de colunas
MD5 direto no Sql Server
Aplicação demora muito para inicializar quando VisualStudio está "Loading Symbols"
Fazendo Painel de Leds em menos usando System.Drawing(parte 3)
Fazendo Painel de Leds em menos usando System.Drawing(parte 2)
- TODAS AS DICAS

Top Poggers (sempre)

Jar Jar Binks (136)
Cuban Pete (127)
Tufo (28)

Top Poggers (30 dias)


Área restrita

Logon

pogMasters.NET

Início
Busca Avançada
Contato

RSS
 

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 >>
Nome  
Email
Comentário    
Postar Comentário