FINALIZAR, FECHAR RESTCLIENT

 Tópico anterior Próximo tópico Novo tópico

FINALIZAR, FECHAR RESTCLIENT

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#494209 - 30/06/2020 16:35:43

MFLAVIO
CAMPINAS
Cadast. em:Maio/2009


Ola Gente eu de novo
já pesquisei bastante antes de recorrer a um novo tópico
estou usando RestClient do RestSharp
em algumas funções para acesso a WebAPI do BS2
ja esta tudo Funcionando, so que preciso Fechar as requisições
por exemplo abaixo faço uma consulta a um boleto via API
esta funcionando retorna tudo certinho
mais não encontro como fechar (finalizar) o Client
  Private Sub ConsultaBoleto_API(NN As String)
        Static client = New RestClient('https://apihmz.bancobonsucesso.com.br/pj/forintegration/cobranca/v1/boletos/' & NN & '') With {
      .Timeout = -1
      }
        Static request = New RestRequest(Method.GET)
        request.AddHeader('Authorization', '' & sToken & '')
        Static response As IRestResponse = client.Execute(request)

        If response.StatusCode = 200 Then
            Static json As JObject = JObject.Parse(response.Content)
            Dados_Boleto.Boleto_valor_Pago = Trim(json.SelectToken('ValorLiquidado'))
            Dados_Boleto.Boleto_valor_Pago = Trim(json.SelectToken('pagamento'))
        Else
            SAviso = response.Content
            Aviso.ShowDialog()
            Pnum = 'erro'
        End If

    End Sub  

quando executo a função pela segunda fez
vem os retornos da primeira vez

ou seja preciso finalizar a primeira consulta antes de fazer a segunda
e meu primeiro contato com webAPI então to meio perdido e não achei tanto material de estudo


Deus e o maior dos Programadores, ele criou tudo em liguagem visual
                                           .... e viu Deus que era bom


#494213 - 30/06/2020 17:52:04

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
RestClient é um objeto que implementa IDisposable, logo deve ser usado em blocos Using e jamais deveriam ser estáticos. Mais ou menos assim:

        Using client = As New RestClient('https://apihmz.bancobonsucesso.com.br/pj/forintegration/cobranca/v1/boletos/' & NN & '')  
            client.Timeout = -1
    
        Dim request As HttpRequest = New RestRequest(Method.GET)
        request.AddHeader('Authorization', '' & sToken & '')
        Static response As IRestResponse = client.Execute(request)

        If response.StatusCode = 200 Then
            Static json As JObject = JObject.Parse(response.Content)
            Dados_Boleto.Boleto_valor_Pago = Trim(json.SelectToken('ValorLiquidado'))
            Dados_Boleto.Boleto_valor_Pago = Trim(json.SelectToken('pagamento'))
        Else
            SAviso = response.Content
            Aviso.ShowDialog()
            Pnum = 'erro'
        End If
    End Using


_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#494220 - 01/07/2020 12:37:57

MFLAVIO
CAMPINAS
Cadast. em:Maio/2009


Citação:
:
RestClient é um objeto que implementa IDisposable, logo deve ser usado em blocos Using e jamais deveriam ser estáticos. Mais ou menos assim:

        Using client = As New RestClient('https://apihmz.bancobonsucesso.com.br/pj/forintegration/cobranca/v1/boletos/' & NN & '')  
            client.Timeout = -1
    
        Dim request As HttpRequest = New RestRequest(Method.GET)
        request.AddHeader('Authorization', '' & sToken & '')
        Static response As IRestResponse = client.Execute(request)

        If response.StatusCode = 200 Then
            Static json As JObject = JObject.Parse(response.Content)
            Dados_Boleto.Boleto_valor_Pago = Trim(json.SelectToken('ValorLiquidado'))
            Dados_Boleto.Boleto_valor_Pago = Trim(json.SelectToken('pagamento'))
        Else
            SAviso = response.Content
            Aviso.ShowDialog()
            Pnum = 'erro'
        End If
    End Using


KerpLunk
eu estava tentado usar o Using
mais da erro justamente dizendo que o RestClient deve implementar o IDidposable
Código do erro bc3610
e com isso que tentei usando o static

a questão e que usando o Static sempre que executa o bloco
os dados das variáveis ficam em memoria
e quando executa o bloco uma segunda vez as variáveis ainda estão com os dados da primeira execução

já tentei finalizar o Client, o Request e o response
mais nenhum deles tem o DISPOSE
e nem aceitam o nothing

Deus e o maior dos Programadores, ele criou tudo em liguagem visual
                                           .... e viu Deus que era bom


#494221 - 01/07/2020 13:56:05

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Então você está usando alguma library que não implementa IDisposable para o RestClient, o que é esquisito pra caramba. Mas enfim, nesse caso, não use Static que deve resolver. Variáveis Static, não são 'recolhidas' pelo GAC da mesma forma, por isso quando vai executar na segunda vez aparece uma exceção.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#494223 - 01/07/2020 14:14:15

MFLAVIO
CAMPINAS
Cadast. em:Maio/2009


Citação:
:
Então você está usando alguma library que não implementa IDisposable para o RestClient, o que é esquisito pra caramba. Mas enfim, nesse caso, não use Static que deve resolver. Variáveis Static, não são 'recolhidas' pelo GAC da mesma forma, por isso quando vai executar na segunda vez aparece uma exceção.


o Restcliente e Parte do RestSharp 106.11.4 que instalei via nuget
antes o static estava usando o DIM
da o mesmo problema, tenti usando o Satatic justamente por ele não salvar no GAC, imaginei que não ficaria variável viva apos finalizar o bloco

tentei implementar o Idisposable direto na classe

não deu erro mais também não funcionou kkkk
Public Class Cobranca_BS2 : Implements IDisposable  



Deus e o maior dos Programadores, ele criou tudo em liguagem visual
                                           .... e viu Deus que era bom


 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário