REST API SendAsync bricht ab

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von slice.

    REST API SendAsync bricht ab

    Hallo,

    ich habe ein großes/kleines Problem mit meiner Rest API Funktion.
    Hierzu habe ich ein kleines TestProgramm geschrieben, das im ERP System über REST Api daten ändern soll.
    Das funktioniert so weit auch sehr gut.

    Jetzt habe ich die Bibliothek in mein größeres Projekt hinzugefügt und die REST API Bibliotheks komponente streikt.

    Anbei der Code für den REST API aufruf:

    VB.NET-Quellcode

    1. Public Async Sub ChangeIFSVersion(Part_No As String, Contract_Side As String, IFS_EngChgLevel As String, ChangeVersion As IFS_Columns, IFS_Server As String, Sender As String, SaveTable As Boolean, CloseRevisionTable As Boolean, Optional ByVal ResponseMessegaBox As Boolean = False)
    2. Try
    3. Select Case IFS_Server
    4. Case "TEST"
    5. IFS_Server = LinkRestAPI_Test & "(PartNo='" & Part_No & "',Contract='" & Contract_Side & "',EngChgLevel='" & IFS_EngChgLevel & "')"
    6. Clear_Link = LinkRestAPI_Test
    7. WriteInSystem = "TEST"
    8. WriteInMainSystem = False
    9. Case "MAIN"
    10. IFS_Server = LinkRestAPI_Prod & "(PartNo='" & Part_No & "',Contract='" & Contract_Side & "',EngChgLevel='" & IFS_EngChgLevel & "')"
    11. Clear_Link = LinkRestAPI_Prod
    12. WriteInSystem = "MAIN"
    13. WriteInMainSystem = True
    14. End Select
    15. Dim client As HttpClient = New HttpClient()
    16. Dim serializer As JavaScriptSerializer = New JavaScriptSerializer()
    17. Dim ath As String = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(IFSMain.IFSLoginName & ":" & IFSMain.IFSPW))
    18. Dim baseUri As Uri = New Uri(Clear_Link)
    19. client.BaseAddress = baseUri
    20. client.DefaultRequestHeaders.Clear()
    21. client.DefaultRequestHeaders.ConnectionClose = True
    22. client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Basic", ath)
    23. Dim serializedResult As String = GOKMAINFunction_JSONCompiler.CreateJSONFile(ChangeVersion)
    24. Dim RestContent As New Http.StringContent(serializedResult, Encoding.UTF8, "application/json")
    25. Dim method = "PATCH"
    26. Dim httpVerb = New HttpMethod(method)
    27. Dim httpRequestMessage = New HttpRequestMessage(httpVerb, IFS_Server) With {.Content = RestContent}
    28. Dim RestResponse As Http.HttpResponseMessage = Await client.SendAsync(httpRequestMessage) 'And dieser stelle springt er mir im größeren Programm raus
    29. IFSMain.GOKSettings.AddNewIFSRevisionEntry(Part_No, IFS_EngChgLevel, Contract_Side, "ChangeIFSVersion", Clear_Link, serializedResult, RestResponse.StatusCode.ToString, Sender, Me.WriteInSystem, WriteInMainSystem, SaveTable, CloseRevisionTable)
    30. RaiseEvent GetResponse(RestResponse, ResponseMessegaBox, "ChangeIFSVersion", Part_No, IFS_EngChgLevel)
    31. Catch ex As Exception
    32. Debug.Print("Fehler übetragung!!!")
    33. End Try
    34. End Sub


    Alle Links alle Login Daten sind die gleichen, jedoch beim

    VB.NET-Quellcode

    1. Dim RestResponse As Http.HttpResponseMessage = Await client.SendAsync(httpRequestMessage)
    springt er raus, ohne eine Fehlermeldung!
    Woran kann das liegen?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @GOKTerek was sagt denn die Fehlermeldung ex.Message?
    Die solltest Du als Minimum ausgeben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nichts, er geht da gar nicht rein. Es ist kein Fehler. Er macht syndasync, und das wars. danach macht er in der übergeordneten sub weiter.
    Es kommt kein response zurück.

    In der Testumgebung macht er sendasync, wartet ein paar sek. und dann habe ich einen response. und er geht weiter zu zeile 45 um die Log Infos zu schreiben.

    Edit:

    Habe hier mal was gelesen und getestet. Jedoch möchte ich ja den temporären Deadlock haben, der stört mich nicht. Wenn ich jedoch

    VB.NET-Quellcode

    1. Dim RestResponse As Http.HttpResponseMessage = Await client.SendAsync(httpRequestMessage).ConfigureAwait(False)


    schreibe, funktioniert es!??? Der befehl configureAwait sagt aus, ob er auf den Response warten soll, oder asynchron weiter machen soll.



    So funktioniert! Musste den Code so umändern

    Vorher:

    VB.NET-Quellcode

    1. Dim RestResponse As Http.HttpResponseMessage = Await client.SendAsync(httpRequestMessage)


    Nachher:

    VB.NET-Quellcode

    1. Dim RestResponse As Http.HttpResponseMessage = client.SendAsync(httpRequestMessage).Result


    Jetzt stellt sich mir die frage warum funktioniert Await nicht!?

    Beiträge zusammengefügt. ~Thunderbolt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    Nein, habe ich nicht. Das kann es natürlich sein, in der Testumgebung ändere ich manuell nur einen Artikel eintrag. Im Hauptprogramm ändere ich ja automatisch tausende Artikel.
    Deshalb ist das in der Testumgebung auch nicht aufgefallen.