Объединение параллельных результатов от различных веб-служб в Windows Azure - PullRequest
1 голос
/ 12 апреля 2011

Webservice1 может получать набор переменных Lon / Lat. На основании этих переменных он возвращает результирующий набор элементов поблизости.

Чтобы создать набор результатов, Webservice1 должен передать переменные нескольким веб-сервисам нашего собственного и нескольким внешним веб-сервисам. Все эти веб-сервисы возвращают набор результатов. Комбинация этих наборов результатов этих вторичных веб-сервисов является набором результатов, который должен быть возвращен Webservice1.

Каков наилучший подход к проектированию в Windows Azure с учетом затрат и производительности?

Должны ли мы последовательные запросы на запуск от Webservice1 к другим веб-сервисам ждать ответа и продолжать? Или мы можем, например, использовать очередь, в которой мы публикуем переменные, которые должны быть получены вторичными веб-сервисами?

1 Ответ

1 голос
/ 13 апреля 2011

Я думаю, что вы ответили на свой вопрос в заголовке.

Я бы не стал беспокоиться об использовании очереди.Очереди отлично подходят для отправки информации, с которой нужно что-то решать, когда не имеет значения, сколько времени занимает обработка.Поскольку у вас есть веб-служба, ожидающая получения результатов, это не идеально.

Отправка запросов в другие веб-службы по одному будет работать и технически проще всего, но этоне даст вам наилучшей производительности.

В этой ситуации я бы отправлял запросы всем другим веб-службам параллельно, используя Task Parallel Library .Предполагая, что порядок пунктов, которые вы возвращаете, не важен, ваш код может выглядеть примерно так:

    public List<LocationResult> PlacesOfInterest(LocationParameters parameters)
    {
        WebService[] webServices = GetArrayOfAllWebServices();

        LocationResult[][] results = new LocationResult[webServices.Count()][];

        // Call all of the webservices parallel
        Parallel.For((long)0,
                        webServices.Count(),
                        i =>
                        {
                            results[i] = webServices[i].PlacesOfInterest(parameters);
                        });

        var finalResults = new List<LocationResult>();

// Put all the results together
        for (int i = 0; i < webServices.Count(); i++)
        {
            finalResults.AddRange(results[i]);
        }

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