开发者

Aggregate parallel results from different web services in Windows Azure

Webservice1 can receive a set of Lon/Lat variables. Based on these variables it returns a resultset of items nearby.

In order to create the resultset Webservice1 has to pass the variables to multiple webservices of our own and multiple external webservices. All these webs开发者_如何转开发ervice return a resultset. The combination of these resultsets of these secondary Webservices is the resultset to be returned by Webservice1.

What is the best design approach within Windows Azure with costs and performance in mind?

Should we sequential fire requests from Webservice1 to the other webservices wait for a response and continue? Or can we eg use a queue where we post the variables to be picked up by the secondary webservices?


I think you've answered you're own question in the title.

I wouldn't worry about using a queue. Queues are great for sending information off to get dealt with by something else when it doesn't matter how long it takes to process. As you've got a web service that's waiting to return results, this is not ideal.

Sending the requests to each of the other web services one at a time will work and is the easiest option technically, but it won't give you the best performance.

In this situation I would send requests to each of the other web services in parallel using the Task Parallel Library. Presuming the order of the items that you return isn't important your code might look a bit like this.

    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;
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜