Clipper On Line • Ver Tópico - Testar se um WS está online

Testar se um WS está online

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Testar se um WS está online

Mensagempor asimoes » 03 Fev 2021 16:13

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
â–º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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Testar se um WS está online

Mensagempor sygecom » 04 Fev 2021 09:10

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:

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


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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
leonardodemachado@hotmail.com

Faça você também sua doação esse fórum é uma lenda viva: http://www.pctoledo.com.br/doacao
Avatar de usuário

sygecom
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 7006
Data de registro: 21 Jul 2006 10:12
Cidade/Estado: Alvorada-RS
Curtiu: 1 vez
Mens.Curtidas: 130 vezes

Testar se um WS está online

Mensagempor Kapiaba » 04 Fev 2021 09:19

//-> 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" )
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Testar se um WS está online

Mensagempor JoséQuintas » 04 Fev 2021 09:28

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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Testar se um WS está online

Mensagempor asimoes » 04 Fev 2021 09:56

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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Testar se um WS está online

Mensagempor asimoes » 04 Fev 2021 10:06

Prezados bom dia,

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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Testar se um WS está online

Mensagempor JoséQuintas » 04 Fev 2021 11:04

Uso assim:


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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Testar se um WS está online

Mensagempor asimoes » 04 Fev 2021 14:30

Quintas,

Testei sua função retorna .f., pelo google vejo os métodos do ws, passando a url

2021-02-04 14_27_28-Window.png
2021-02-04 14_27_28-Window.png (5.41 KiB) Visualizado 845 vezes
â–º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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Testar se um WS está online

Mensagempor Kapiaba » 05 Fev 2021 13:11

O código do mister Quintas funciona bem com Harbour.

QUINTAS2.png


Abs.
Kapiaba
Colaborador

Colaborador
 
Mensagens: 1765
Data de registro: 07 Dez 2012 15:14
Cidade/Estado: São Paulo
Curtiu: 310 vezes
Mens.Curtidas: 119 vezes

Testar se um WS está online

Mensagempor asimoes » 05 Fev 2021 23:28

Kapiava, obrigado eu estou interessado no insucesso, na falha eu fiz assim

cBuffer := oPg:responseText

lSuccesso := oXMLDoc:loadXML( cBuffer )


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,
â–º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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Testar se um WS está online

Mensagempor asimoes » 05 Fev 2021 23:38

Sempre vem falso o passando a url do ws
2021-02-04 14_27_28-Window.png
2021-02-04 14_27_28-Window.png (5.41 KiB) Visualizado 794 vezes


lret := IsInternet( cUrl )

A url eu passei na barra de endereços do google
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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Testar se um WS está online

Mensagempor rosalvo rosa » 11 Fev 2021 19:08

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 ?
Avatar de usuário

rosalvo rosa
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 155
Data de registro: 10 Jan 2006 18:21
Cidade/Estado: Curitiba - PR
Curtiu: 1 vez
Mens.Curtidas: 1 vez

Testar se um WS está online

Mensagempor Itamar M. Lins Jr. » 12 Fev 2021 13:47

Olá!
Pelo que andei estudando, essas funções são protótipos para usar a DLL do windows. "wsock32.dll"
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"


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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Testar se um WS está online

Mensagempor rochinha » 21 Fev 2021 15:17

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.
   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 fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Testar se um WS está online

Mensagempor asimoes » 22 Fev 2021 01:43

Obrigado Rochinha,

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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 8 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro