Avatar billede Jørgen Kirkegaard Professor
10. maj 2022 - 22:29 Der er 11 kommentarer

xmlhttp - hvordan afsluttes / disconnectes / removes

Jeg skal koble mig på to API'er umiddelbart efter hinanden. Jeg kan imidlertid ikke åbne nr. 2, for nr 1 bliver "husket" på en måde.

Jeg vil derfor gerne lukke/slukke/disconnecte/remove nr.1 eller hvad det måtte hedde, for dernæst at åbne nr. 2

xmlhttp.abort duer ikke til dette.

Det fungerer fint, hvis jeg afslutter MS Access først, men det er så det, jeg gerne vil undgå.

How to?
Avatar billede arne_v Ekspert
11. maj 2022 - 03:14 #1
Du vil ikke afslutte Access. Fint.

Men kan du ikke create et ny XMLHTTP objekt?
Avatar billede Gustav Ekspert
11. maj 2022 - 08:49 #2
Du har tidligere fortalt, at det ikke hjalp at lukke filen. Nu gør det, så hvad er rigtigt?

Hvis det hjælper at lukke filen, så er det Access og objektet, der husker noget. I så fald, prøv efter første kald:

     Set XmlHttp = Nothing
    Set XmlHttp = New XMLHTTP60

Fortsæt så med det andet kald.
Avatar billede Jørgen Kirkegaard Professor
11. maj 2022 - 13:29 #3
Gustav: Korrekt, min fejl, den virker, når jeg lukker databasen helt og starter den op igen.
arne_v: Nej desværre.
Jeg har netop prøvet med en ny variabel anden gang, hvilket heller ikke hjalp.

Altså:

    Set XmlHttp = Nothing
    Set XmlHttp = New XMLHTTP60
run run run
    Set XmlHttp = Nothing
    Set XmlHttp2 = New XMLHTTP60
run run run
..duer heller ikke..
prøvede så i hver sin function, stadig med hvert sit variabel navn
..duer heller ikke...

Mærkeligt, at der ikke findes en .Close.
Avatar billede arne_v Ekspert
11. maj 2022 - 14:59 #4
Det skal virke med to objekter - de skal være uafhængige.

Men vi skal nok vide lidt mere om hvad duer ikke og "husker" dækker over.
Avatar billede Gustav Ekspert
11. maj 2022 - 15:38 #5
Hvad sker der, hvis du åbner to instances af Access med det samme program, men med hver sit af de to sæt API-nøgler som det første kald, og så kører programmet på dem lige efter hinanden?
Avatar billede Gustav Ekspert
11. maj 2022 - 15:43 #6
Se lige noten her nederst:

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms757849(v=vs.85)

Måske kunne du prøve efter første kald at sende noget, der vil give en fejl 40x, og dernæst sende kald nr. 2.
Avatar billede Jørgen Kirkegaard Professor
11. maj 2022 - 15:45 #7
Function henter i begge tilfælde den samme ResponseText for både første og andet kald, så MsgBox skriver "Ens". Det er det, jeg mener med, at den "husker" opkoblingen fra første "Open" til den næste "Open".

Hvis jeg kun kører nederste del (altså efter at have lukket Access ned og startet op igen) med den nye "Open", henter den som ventet ResponseText2 fra det andet kald.

Nedenstående function er en kopi, hvor jeg har sløret api-nøglerne.


Function http_test_Economic_eksperten()

'Tester en API-forbindelse efterfulgt af en ny.
   
    Const Async            As Boolean = False
    Const StatusOk          As Integer = 200
    Const StatusError      As Integer = 403
    Const ApiDataKey        As String = "Content-Type"
    Const ApiDataFormat    As String = "application/json"
   
    Dim XmlHttp            As XMLHTTP60
    Dim XmlHttp2            As XMLHTTP60
   
    Dim ServiceUrl As String
 
    Dim ResponseText  As String
    Dim ResponseText2  As String
    Dim Rstatus As Integer

    ServiceUrl = "https://restapi.e-conomic.com/self"

    Dim AgreementGrantToken    As String
    Dim AppSecretToken As String
' e-conomic jk@findatsol-test:
    AppSecretToken = "1HBe7..."
    AgreementGrantToken = "TfFw5..."

    Set XmlHttp = New XMLHTTP60
   
    XmlHttp.Open "GET", ServiceUrl, Async
    XmlHttp.setRequestHeader ApiKeyPrefix & AppSecretKey, AppSecretToken
    XmlHttp.setRequestHeader ApiKeyPrefix & AgreementGrantKey, AgreementGrantToken
    XmlHttp.setRequestHeader ApiDataKey, ApiDataFormat
    XmlHttp.Send

    ResponseText = XmlHttp.ResponseText
    Rstatus = XmlHttp.status
   
MsgBox ResponseText
   
    Set XmlHttp = Nothing
   
' e.conomic, kunde
    AgreementGrantToken = "Dnw1xa..."
    AppSecretToken = "35JI2..."
   
    Set XmlHttp2 = New XMLHTTP60
   
    XmlHttp2.Open "GET", ServiceUrl, Async
    XmlHttp2.setRequestHeader ApiKeyPrefix & AppSecretKey, AppSecretToken
    XmlHttp2.setRequestHeader ApiKeyPrefix & AgreementGrantKey, AgreementGrantToken
    XmlHttp2.setRequestHeader ApiDataKey, ApiDataFormat
    XmlHttp2.Send

    ResponseText2 = XmlHttp2.ResponseText
    Rstatus = XmlHttp2.status
   
   
MsgBox ResponseText2
   
    If ResponseText = ResponseText2 Then MsgBox "Ens"
   
End Function
Avatar billede Jørgen Kirkegaard Professor
11. maj 2022 - 15:57 #8
Gustav: Læser først nu dine kommentarer. Prøver lige.
Avatar billede Jørgen Kirkegaard Professor
11. maj 2022 - 16:14 #9
Gustav #5: Der sker det samme. Begge instanser opkobler sig på samme API. Uanset hvilken, jeg kører først, er det den første, som "gælder" i andet kald.
Gustav #6: Heller ikke.

Interessant udfordring, men jeg sniger mig udenom ved at lukke Access og åbne den igen til behandling af den nye opkobling.

Tak for indsatsen.
Avatar billede arne_v Ekspert
11. maj 2022 - 16:33 #10
Gæt:

xmlhttp.setRequestHeader "Connection", "Close"
Avatar billede Gustav Ekspert
11. maj 2022 - 16:35 #11
Ellers så spørg hos supporten. Måske har de fået spørgsmålet før, om end jeg tvivler.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester