Метод вызова не получает возвращаемое значение после вызова веб-службы REST - PullRequest
0 голосов
/ 21 января 2020

У меня есть веб-сервис REST (asp. net core 2.2 c#), и я звоню из приложения asp. net (веб-форма в VB. net) ,

Название не очень точное: я получаю значение из своего веб-сервиса, но метод, предшествующий тому, который вызывает веб-метод, не возвращает возвращаемое значение. Итак, у меня есть:

  • метод1 вызов метода2
  • метод2 вызов метода3
  • метод3 вызов webmethod
  • method3 получить возвращаемое значение из webmethod
  • method2 ничего не получает
  • method1 ничего не получает ни

Если я удалю вызов веб-службы из моего method3 и напрямую верну новый объект ApiReturn в method2, method2 и method1 получает значение так, как должно (на самом деле метод не получает значение

Я очень новичок в мире веб-сервисов REST, поэтому я понятия не имею ... не могли бы вы мне помочь? Это мой код:

Метод 1: BtnTestAnything_Click

Protected Sub BtnTestAnything_Click(sender As Object, e As EventArgs)
    Dim currentQuote As Quote = New Quote With {
        .NumberEpt = 13245,
        .Origin = "DM")

    LoemailApi.RunAsync(currentQuote).GetAwaiter().GetResult()
End Sub

Метод 2: RunAsyn c и Method3: SendEmailToProviderAsyn c

Friend Class LoemailApi

Public Shared Async Function RunAsync(myQuote As Quote) As Task(Of ApiReturn)
            client.BaseAddress = New Uri("loemail_api_uri")
            client.DefaultRequestHeaders.Accept.Clear()
            client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("loemail_api_media"))
            client.DefaultRequestHeaders.AcceptCharset.Clear()
            client.DefaultRequestHeaders.AcceptCharset.Add(New StringWithQualityHeaderValue("loemail_api_charset"))

            Dim ret = Await SendEmailToProviderAsync(myQuote)

            ' I NEVER GET HERE EXCEPT WHEN I REMOVE THE CALL client.PostAsJsonAsync() TO WEB-METHOD IN SendEmailToProviderAsync()
                Console.WriteLine(ret)

            Return ret
End Function

Private Shared Async Function SendEmailToProviderAsync(ByVal quote As Quote) As Task(Of ApiReturn)

            Dim response As HttpResponseMessage = Await client.PostAsJsonAsync("api/providersSend", quote).ConfigureAwait(False)
            response.EnsureSuccessStatusCode()

            Dim ret As ApiReturn = New ApiReturn()
            If (response.IsSuccessStatusCode) Then
                ret = Await response.Content.ReadAsAsync(Of ApiReturn)()
            End If

            ' HERE I HAVE A VALUE IN ret, ACCORDINGLY TO WHAT MY WEBSERVICE RESPOND
            Return ret   

End Function

End Class

Любой комментарий к моему коду, который поможет мне улучшить кстати, можно только приветствовать.

Большое спасибо!

1 Ответ

0 голосов
/ 21 января 2020

Я понял: у меня возникла та же проблема при вызове веб-метода, и я решил ее, добавив .ConfigureAwait (False) в конце моего вызова. Так что я делаю то же самое на мой вызов SendEmailToProviderAsyn c:

    ret = Await SendEmailToProviderAsync(myQuote).ConfigureAwait(False)

Я предполагаю, что мой вызов больше не асин c, но это не проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...