Página 1 de 2

dos error 64 rede windows server

Enviado: 06 Jul 2014 21:43
por JoséQuintas
À primeira vista, parece que são os terminais que ficam parados com o sistema aberto.
Pelo que vi, dos error 64 é "nome de rede excluído".
Numa das vezes que isso aconteceu, a pasta dos DBFs do servidor não dava pra ser acessada, levou vários segundos para voltar ao normal.
Alguém já passou por esse problema?

José M. C. Quintas

dos error 64 rede windows server

Enviado: 07 Jul 2014 16:37
por JoséQuintas
Esta alteração na errorsys vai ter o efeito que espero?
Aguardar 2 segundos e tentar novamente.

Código: Selecionar todos

   IF e:OsCode == 64
      wOpen( 10, 10, 20, 80, "Atenção" )
      @ 15, 15 SAY "Servidor sumiu. Tentar novamente em 2 segundos"
      Inkey(2)
      wClose()
      RETURN .T.
   ENDIF
Nota:
Provavelmente seria configurar o timeout no servidor, mas quando não se tem acesso, o jeito é tentar alternativas.
Pelo menos o sistema vai ficar mostrando a janelinha pro usuário, que deve cobrar solução do responsável.

dos error 64 rede windows server

Enviado: 07 Jul 2014 17:24
por zazibr
ja verificou na configuração de hardware se esta habilitado para desligar se a maquina entrar em modo de economia de energia ?

dos error 64 rede windows server

Enviado: 07 Jul 2014 17:28
por Jairo Maia
Olá José,

Mil perdões, não tenho nada em mão para indicar agora, mas no próprio site da Microsoft, sei que tem muita informação sobre isso. E igualmente confusa, a medida que são situações diversas que podem provocar a perda da conexão. Sem substimar sua capacidade de pesquisa, sei que entre outras coisas você irá encontrar desde incompatibilidade de hardware, e até mesmo orientação a usar o ping antes de tentar se conectar...

PS: Se você estiver usando *SQL, sei que os servidores (não sei a partir de qual versão do OS, mas o servidor ignora configuração de economia de energia), mas uma das razões pode inclusive ser essa questão.

dos error 64 rede windows server

Enviado: 07 Jul 2014 17:47
por JoséQuintas
Se considerar o texto da Microsoft, o Harbour é velho.

"É possível que alguns programas mais antigos não salvem ou acessem dados com a unidade desconectada. Porém, eles funcionam normalmente antes da unidade ser desconectada. "

Aí diz que o limite de tempo é de 15 minutos pra desconectar o terminal automaticamente.

http://support.microsoft.com/kb/297684

A informação contida neste artigo aplica-se a:
Microsoft Windows Server 2003, Standard Edition (32-bit x86)
Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
Microsoft Windows 2000 Server
Microsoft Windows 2000 Professional Edition
Microsoft Windows Small Business Server 2003 Premium Edition
Microsoft Windows Small Business Server 2003 Standard Edition
Microsoft Windows XP Home Edition
Microsoft Windows XP Professional
Service Pack 3 para Windows XP
Microsoft Windows XP Professional x64 Edition
Microsoft Windows Server 2003, Enterprise x64 Edition
Windows Vista Enterprise 64-bit edition
Windows Vista Enterprise
Windows Vista Home Basic
Windows Server 2008 R2 Enterprise
Windows Server 2008 Enterprise
Windows 7 Enterprise


1. Precisa um tempo pra reconectar
2. Não sei se ao reconectar, a conexão antiga ainda vale, a que está aberta no Harbour
3. Aquela alteração que mencionei seria uma tentativa de contornar isto.

Ok. Tendo acesso ao servidor dá pra alterar isso, mas se não tiver... complica

dos error 64 rede windows server

Enviado: 08 Jul 2014 06:04
por Jairo Maia
Olá José,
JoséQuintas escreveu:Se considerar o texto da Microsoft, o Harbour é velho.
O Harbour não, mas aplicativos que precisam de mapeamento sim. Você ainda usa mapeamento com o Harbour?

dos error 64 rede windows server

Enviado: 08 Jul 2014 08:14
por JoséQuintas
Sim, continuo usando a pasta do servidor mapeada como uma letra.
Mas no problema em questão some letra, pasta e tudo, porque o terminal foi desconectado e precisa tempo pra reconectar.
Mesmo que algum arquivo esteja aberto.

dos error 64 rede windows server

Enviado: 08 Jul 2014 08:56
por Jairo Maia
Talvez então você possa desativar este recurso via linha de comando como indica o artigo, algo como:

Código: Selecionar todos

Hb_Run( "net config server /autodisconnect:-1" )
Embora também possa ser feito via registro.

dos error 64 rede windows server

Enviado: 08 Jul 2014 09:08
por JoséQuintas
Não sei se a segurança do servidor vai deixar.
Tive uma idéia pra quebra galho: rodar uma rotina cada 5 minutos pra acessar a pasta, usando multithread.
Pelo menos vai manter a conexão ativa.

dos error 64 rede windows server

Enviado: 08 Jul 2014 12:28
por Kapiaba
Olá, Tive Problemas com windows 2003 server, e resolvi assim:

Código: Selecionar todos

    // Pego novamente o diretorio onde estao os .DBFs
    CHDIR(direxe)

    SET DEFAULT TO
Não sei se é o seu caso, mas não custa tentar.

Obg. abs.

dos error 64 rede windows server

Enviado: 09 Jul 2014 06:25
por Jairo Maia
JoséQuintas escreveu:Tive uma idéia pra quebra galho: rodar uma rotina cada 5 minutos pra acessar a pasta, usando multithread.
Creio que resolva. Neste caso, pode ser assim também, só não sei se altera o consumo de CPU:

Código: Selecionar todos

nTempo := Seconds()+300

nTask := HB_BackGroundAdd( {|| If( Seconds() > nTempo, ChecaServ(), Nil ) } )

HB_IdleAdd( {|| HB_BackGroundRun( nTask ) } )

Function ChecaServ()
 nTempo := Seconds()+300
 /*
  codigo
 */
Return

dos error 64 rede windows server

Enviado: 09 Jul 2014 10:22
por JoséQuintas
Eu criei esta classe pra esse tipo de coisa.
Repete a rotina a cada intervalo de tempo, enquanto o programa que chamou estiver sendo executado.
A rotina fica independente do programa, mas fechou o programa a rotina também fecha (com checagem a cada 1 segundo).
No caso de forçar fechamento, só alterar pra ::lExit := .T.

Nota:
É pra WVG. Apesar de não ter tela, é necessário criar o ambiente de trabalho com tela oculta.
AppInitSets() é minha função que inicializa meu ambiente de trabalho (pasta temporária, codepage, etc).

Código: Selecionar todos

oRun := RunWhileThreadClass():New()
oRun:nInterval := 300
oRun:bCode := { || Directory("*.*") }
hb_ThreadStart( { || oRun:Execute() } )

Código: Selecionar todos

CREATE CLASS RunWhileThreadClass
   VAR lExit        INIT .F.
   VAR nThreadId
   VAR nInterval    INIT 600
   VAR cWindowTitle INIT ""
   VAR bCode
   METHOD Init()
   METHOD Execute( bCode )
   END CLASS

METHOD Init() CLASS RunWhileThreadClass
   ::nThreadId := hb_ThreadSelf()
   RETURN NIL

METHOD Execute( bCode ) CLASS RunWhileThreadClass
   LOCAL nCont

   hb_gtReload( "WVG" )
   IF bCode != NIL
      ::bCode := bCode
   ENDIF
   AppInitSets()
   HB_GtInfo( HB_GTI_WINTITLE, ::cWindowTitle )
   wvgSetAppWindow():Hide()
   DO WHILE .NOT. ::lExit
      Eval( ::bCode )
      FOR nCont = 1 TO ::nInterval
         hb_ReleaseCPU()
         IF hb_ThreadWait( ::nThreadId, 0.1, .T. ) == 1
            ::lExit := .T.
         ENDIF
         Inkey(1)
         IF ::lExit
            EXIT
        ENDIF
      NEXT
   ENDDO
   RETURN NIL

dos error 64 rede windows server

Enviado: 10 Jul 2014 11:49
por Jairo Maia
Ok! Eu estava curioso pra saber como você faria isso com MultiThread.

A única coisa que observei foi que se você acessa desta forma: oRun:bCode := { || Directory("*.*") }, não deveria ter o caminho da pasta do servidor para que o terminal acione a conexão?

dos error 64 rede windows server

Enviado: 10 Jul 2014 13:43
por JoséQuintas
Para o aplicativo, a pasta atual é a pasta dos arquivos.

dos error 64 rede windows server

Enviado: 12 Jul 2014 20:29
por JoséQuintas
Por enquanto nenhum erro novo.
E por enquanto usando a primeira opção.

Código: Selecionar todos

STATIC FUNCTION DefError( e )
   LOCAL nCont, cMessage, aOptions, nChoice

   // by default, division by zero yields zero
   IF ( e:GenCode == EG_ZERODIV )
      RETURN ( 0 )
   ENDIF

   // Adicionado em 06/07/2014 pra forçar não dar erro 
   IF e:OsCode == 64
      wOpen( 10, 10, 20, 80, "Atenção" )
      @ 15, 15 SAY "Servidor sumiu. Tentar novamente em 2 segundos"
      Inkey(2)
      wClose()
      RETURN .T.
   ENDIF