Testar se um WS está online
Moderador: Moderadores
Testar se um WS está online
Olá Pessoal,
Tem como saber se um serviço WS está online e como eu posso recuperar a mensagem de erro, estou usando MSXML2.ServerXMLHTTP
Tem como saber se um serviço WS está online e como eu posso recuperar a mensagem de erro, estou usando MSXML2.ServerXMLHTTP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Testar se um WS está online
Mestre,
Essa resposta não é tão simples, por que o LINK pode está on-line mas o serviço do WS fora do AR.
Para ver o link, pode usar por exemplo:
Mas para saber se o serviço está rodando no link, é outro assunto, para isso vai ter que ver as possíveis respostas que tem na url que está consumindo.
Essa resposta não é tão simples, por que o LINK pode está on-line mas o serviço do WS fora do AR.
Para ver o link, pode usar por exemplo:
Código: Selecionar todos
FUNCTION MAIN()
INETESTACONECTADA('ws.nomeservico.com.br')
RETURN NIL
FUNCTION INETESTACONECTADA(cAddress)
LOCAL cIp, lRET := .F.
Local cITME_START:=TIME()
LOCAL cITME_END :=''
IF cAddress = NIL
cAddress := "www.google.com"
ENDIF
WsaStartUp()
cIp := GETHOSTBYNAME( cAddress )
WsaCleanUp()
lRET:=cIp<>"0.0.0.0"
cITME_END :=TIME()
IF TimeToSec(ElapTime(cITME_START,cITME_END)) > 5
lRET:=.F.
ENDIF
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Testar se um WS está online
Código: Selecionar todos
//-> Funcao para checar a Internet
FUNCTION IsInternet()
LOCAL cIp, cVret := .F.
WsaStartUp()
cIp := GETHOSTBYNAME( "microsoft.com" )
cIp := GETHOSTBYNAME( "microsoft.com" )
WsaCleanUp()
// Seguranca caso o provedor da microsoft esteja fora do ar...
IF ( cIp <= "0.0.0.0" )
WsaStartUp()
cIp := GetHostByName( "google.com" )
cIp := GetHostByName( "google.com" )
WsaCleanUp()
ENDIF
RETURN( cIp<>"0.0.0.0" )
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Testar se um WS está online
De repente, se existe uma resposta padrão pra quando está ok, só testar se a mensagem é diferente de ok.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Testar se um WS está online
O erro ocorre no método post, se o serviço está ok, o método loadsml funciona sem problemas, a minha ideia seria testar antes do post
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Testar se um WS está online
Prezados bom dia,
Quais as libs para as funções GETHOSTBYNAME, WsaStartUp e WSACLEANUP ?
Quais as libs para as funções GETHOSTBYNAME, WsaStartUp e WSACLEANUP ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Testar se um WS está online
Uso assim:
Código: Selecionar todos
FUNCTION IsInternet( cUrl, nPort )
LOCAL lOk := .F. , aAddr
hb_Default( @cUrl, "www.google.com" )
hb_Default( @nPort, 80 )
aAddr := hb_socketResolveINetAddr( cUrl, nPort )
IF ! Empty( aAddr )
lOk := hb_socketConnect( hb_socketOpen(), aAddr, 2000 )
ENDIF
RETURN lOk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Testar se um WS está online
Quintas,
Testei sua função retorna .f., pelo google vejo os métodos do ws, passando a url
Testei sua função retorna .f., pelo google vejo os métodos do ws, passando a url
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Testar se um WS está online
Kapiava, obrigado eu estou interessado no insucesso, na falha eu fiz assim
Se o lSucesso for false, então houve falha na leitura do xml
Aqui essas funções não entendem uma url de um ws sempre vem ,t,, mesmo passando um endereço errado,
Código: Selecionar todos
cBuffer := oPg:responseText
lSuccesso := oXMLDoc:loadXML( cBuffer )
Aqui essas funções não entendem uma url de um ws sempre vem ,t,, mesmo passando um endereço errado,
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Testar se um WS está online
Sempre vem falso o passando a url do ws
lret := IsInternet( cUrl )
A url eu passei na barra de endereços do google
A url eu passei na barra de endereços do google
Código: Selecionar todos
FUNCTION IsInternet( cUrl, nPort )
LOCAL lOk := .F. , aAddr
hb_Default( @cUrl, "www.google.com" )
hb_Default( @nPort, 80 )
aAddr := hb_socketResolveINetAddr( cUrl, nPort )
IF ! Empty( aAddr )
lOk := hb_socketConnect( hb_socketOpen(), aAddr, 2000 )
ENDIF
RETURN lOk
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- rosalvo rosa
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 10 Jan 2006 19:21
- Localização: Curitiba - PR
Testar se um WS está online
Olá amigos
O colega ASIMOES perguntou mas eu não vi a resposta, por isso pergunto também:
Quais as libs para as funções GETHOSTBYNAME, WsaStartUp e WSACLEANUP ?
O colega ASIMOES perguntou mas eu não vi a resposta, por isso pergunto também:
Quais as libs para as funções GETHOSTBYNAME, WsaStartUp e WSACLEANUP ?
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Testar se um WS está online
Olá!
Pelo que andei estudando, essas funções são protótipos para usar a DLL do windows. "wsock32.dll"
No Harbour temos as funções nativas para isso INET e SOCKETS(acredito)
hb_socketOpen()
hb_socketConnect()
hb_socketGetHostName()
...
Caso queira usar a DLL veja como são os parametros para usar ai em cima com o Harbour
DllLoad("wsock32.dll")
Saudações,
Itamar M. Lins Jr.
Pelo que andei estudando, essas funções são protótipos para usar a DLL do windows. "wsock32.dll"
Código: Selecionar todos
DLL32 FUNCTION WSAStartup(n AS LONG, pStruct AS LPSTR) AS LONG PASCAL FROM "WSAStartup" LIB "wsock32.dll"
DLL32 FUNCTION WSACleanup() AS LONG PASCAL FROM "WSACleanup" LIB "wsock32.dll"
DLL32 FUNCTION closesocket(af AS LONG) AS WORD PASCAL FROM "closesocket" LIB "wsock32.dll"
DLL32 FUNCTION MemCopy(dest AS LPSTR, src AS LPSTR, cb AS LONG ) AS VOID PASCAL FROM "RtlMoveMemory" LIB "Kernel32.dll"
DLL32 FUNCTION socket(af AS LONG, s_type AS LONG, protocol AS LONG ) AS LONG PASCAL FROM "socket" LIB "wsock32.dll"
DLL32 FUNCTION setsockopt(s AS LONG,level AS LONG,optname AS LONG,optval AS LPSTR,optlen AS LONG) AS LONG PASCAL FROM "setsockopt" LIB "wsock32.dll"
DLL32 FUNCTION getsockopt(s AS LONG,level AS LONG,optname AS LONG,optval AS LPSTR,optlen AS LONG) AS LONG PASCAL FROM "getsockopt" LIB "wsock32.dll"
DLL32 FUNCTION htonl(hostlong AS LONG) AS LONG PASCAL FROM "htonl" LIB "wsock32.dll"
DLL32 FUNCTION htons(hostshort AS LONG) AS WORD PASCAL FROM "htons" LIB "wsock32.dll"
DLL32 FUNCTION bind(s AS LONG, pStruct AS LPSTR,namelen AS LONG) AS LONG PASCAL FROM "bind" LIB "wsock32.dll"
DLL32 FUNCTION inet_addr(cp AS STRING) AS LONG PASCAL FROM "inet_addr" LIB "wsock32.dll"
DLL32 FUNCTION inet_ntoa(nip AS LONG) AS STRING PASCAL FROM "inet_ntoa" LIB "wsock32.dll"
DLL32 FUNCTION WSAAsyncSelect(s AS LONG, hWnd AS LONG, wMsg AS LONG, lEvent AS LONG) AS LONG PASCAL FROM "WSAAsyncSelect" LIB "wsock32.dll"
DLL32 FUNCTION recv(s AS LONG, Buf AS LPSTR, buflen AS LONG, flags AS LONG) AS LONG PASCAL FROM "recv" LIB "wsock32.dll"
DLL32 FUNCTION recvfrom(s AS LONG, Buf AS LPSTR, buflen AS LONG, flags AS LONG, pStruct AS LPSTR, namelen AS LONG) AS LONG PASCAL FROM "recvfrom" LIB "wsock32.dll"
DLL32 FUNCTION send(s AS LONG, Buf AS LPSTR, buflen AS LONG, flags AS LONG) AS LONG PASCAL FROM "send" LIB "wsock32.dll"
DLL32 FUNCTION sendto(s AS LONG, Buf AS LPSTR, buflen AS LONG, flags AS LONG, addr AS LPSTR, i AS LONG) AS LONG PASCAL FROM "sendto" LIB "wsock32.dll"
DLL32 FUNCTION WSAGetLastError() AS LONG PASCAL FROM "WSAGetLastError" LIB "wsock32.dll"
hb_socketOpen()
hb_socketConnect()
hb_socketGetHostName()
...
Caso queira usar a DLL veja como são os parametros para usar ai em cima com o Harbour
DllLoad("wsock32.dll")
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Testar se um WS está online
Amiguinhos,
Para saber qual tipo de erro é retornado quando feita automação com MSXML2.ServerXMLHTTP ou Microsoft.XMLHTTP pode-se usar o retorno da variável status.
Para saber qual tipo de erro é retornado quando feita automação com MSXML2.ServerXMLHTTP ou Microsoft.XMLHTTP pode-se usar o retorno da variável status.
Código: Selecionar todos
oAutomacao := TOleAuto():New( "Microsoft.XMLHTTP" )
oAutomacao:Open( ... )
...
oAutomacao:Send( ... )
cStringJSON := oAutomacao:responseText
If oAutomacao:Status == 200
cAutomacaoStatus := "200-Success"
do While oAutomacao:readyState != 4 // 0-UNSENT: Um cliente foi criado. Mas o m?do open() n?foi chamado ainda. 1-OPENED: O m?do open() foi chamado. 2-HEADERS_RECEIVED: o m?do send() foi chamado e os cabe?hos e status est?dispon?is. 3-LOADING: Baixando e responseText contem os dados parciais. 4-DONE: Opera? conclu?.
oAutomacao:WaitForResponse(1000)
Enddo
? cAutomacaoStatus,,cAutomacao:responseText
ElseIf oAutomacao:Status == 400
cAutomacaoStatus := "400-Requisição Mal Formada"
? cAutomacaoStatus,,oAutomacao:responseText
ElseIf oAutomacao:Status == 401
cAutomacaoStatus := "401-Requisição Requer Autenticação"
? cAutomacaoStatus,,oAutomacao:responseText
ElseIf oAutomacao:Status == 403
cAutomacaoStatus := "403-Requisição Negada"
? cAutomacaoStatus,,oAutomacao:responseText
ElseIf oAutomacao:Status == 404
cAutomacaoStatus := "404-Recurso não Encontrado"
? cAutomacaoStatus,,oAutomacao:responseText
ElseIf oAutomacao:Status == 405
cAutomacaoStatus := "405-Método não Permitido"
? cAutomacaoStatus,,oAutomacao:responseText
ElseIf oAutomacao:Status == 408
cAutomacaoStatus := "408-Tempo esgotado para a requisição"
? cAutomacaoStatus,,oAutomacao:responseText
ElseIf oAutomacao:Status == 413
cAutomacaoStatus := "413-Requisição excede o tamanho máximo permitido"
? cAutomacaoStatus,,oAutomacao:responseText
ElseIf oAutomacao:Status == 415
cAutomacaoStatus := "415-Tipo de mídia inválida (falta de informar o content-type correto, ver JSON)"
? cAutomacaoStatus,,oAutomacao:responseText
ElseIf oAutomacao:Status == 429
cAutomacaoStatus := "429-Requisição excede a quantidade máxima de chamadas permitidas à API"
? cAutomacaoStatus,,oAutomacao:responseText
Else
cAutomacaoStatus := "No Error Configured"
cStringJSON := ""
Endif
...
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Testar se um WS está online
Obrigado Rochinha,
Já fiz um testes aqui e funcionou, se não vier o status 200 sei que tem erro
Já fiz um testes aqui e funcionou, se não vier o status 200 sei que tem erro
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)