Soap методы API ничего не возвращают / Состояние; в ожидании активации - PullRequest
0 голосов
/ 26 февраля 2020

Я работаю над небольшим приложением, которое должно взаимодействовать с soap API.

Вот код:

namespace Demo1._0
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                makeSoapCall();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        public static void makeSoapCall()
        {
            EnventoryWebserviceClient client = new EnventoryWebserviceClient();
            client.ClientCredentials.UserName.UserName = "some@thing.com";
            client.ClientCredentials.UserName.Password = "somePass!";

            var method1 = client.contentReportAsync();
            var method2 = client.deleteSoapFlagsAsync();
            var method3 = client.getSoapFlagsAsync();
        }
    }
}

Проблема в том, что я не могу получить ответ от этих методов, клиент успешно подключен, и я не получаю никаких исключений.

Когда я отлаживаю это, я вижу следующую информацию: enter image description here

Я довольно новичок в программировании, что за "проблема" здесь? Как я могу это исправить?

Заранее спасибо

PS

Я пытался их ждать, но я не знаю, как вызвать этот метод в Main метод snce Я должен объявить makeSoapCall метод как async

Приветствия

1 Ответ

1 голос
/ 26 февраля 2020

Вы вызываете асин c методы в вашем SOAP API. Метод asyn c ведет себя иначе, чем синхронные методы, что означает, что методы asyn c по умолчанию не будут ожидать результата, пока он не перейдет к следующей строке.

Ниже у вас есть два метода обработки asyn c методов.

Первый метод:

Это самый простой способ заставить ваш асин c метод вести себя как синхронный. Поскольку «await» удостоверится, что вы получите результат, прежде чем перейти к следующей строке.

Второй метод:

Если для вызова каждого метода требуется некоторое время, Вы можете запустить их параллельно. Это означает, что если каждый метод занимает 7 секунд, вам не нужно ждать 21 секунду, пока все они не завершатся.

Вместо этого вы можете начинать вызовы одновременно и ждать всего 7 секунд.

// First Method
var method1 = await client.contentReportAsync();
var method2 = await client.deleteSoapFlagsAsync();
var method3 = await client.getSoapFlagsAsync();

// Second Method
var method1 = client.contentReportAsync();
var method2 = client.deleteSoapFlagsAsync();
var method3 = client.getSoapFlagsAsync();

Task[] tasks = { method1, method2, method3 };
await Task.WhenAll(tasks);

// To access the result in this way, use ".Result"
var result = method1.Result;

Ваш пример полного кода может выглядеть примерно так (обратите внимание на асин c в объявлении метода):

namespace Demo1._0
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                await makeSoapCall();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        public async static void makeSoapCall()
        {
            EnventoryWebserviceClient client = new EnventoryWebserviceClient();
            client.ClientCredentials.UserName.UserName = "some@thing.com";
            client.ClientCredentials.UserName.Password = "somePass!";

            var method1 = await client.contentReportAsync();
            var method2 = await client.deleteSoapFlagsAsync();
            var method3 = await client.getSoapFlagsAsync();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...