ItayMaoz
ItayMaoz

Reputation: 433

Which option for building this polling windows service is better?

My team is writing a windows service which needs to poll data from a 3rd party system (the 3rd party system provides a web service which we use).
The process will look something like this:
1. Call the 3rd party WS
2. Save the recieved raw data to our DB
3. Process the raw data
4. Save the processed data to our DB
5. Repeat

The team agrees that we actually have 2 different logical operations:
1. Getting and saving the raw data
2. Processing the raw data and saving the results

We are trying to decide which of the following design options is better:
Option 1: Perform both operation on the same windows service, each operation on it's own thread
Option 2: Perform the first operation on the windows service, and async/one-way call a wcf service for the second operation

In your opinion, which option is better?
if you have another alternative you think is better, please share it.

Thanks.

Upvotes: 0

Views: 522

Answers (2)

Casperah
Casperah

Reputation: 4564

According to your comment, I would say that you have a thread that once a second polls the 3rd party service and starts two tasks.

Task 1 would store the raw data to database. Task 2 would process the raw data and store the result in database.

If the polling thread retrieves 1000 entries it should poll again without delay.

You can either use System.Threading.ThreadPool or System.Threading.Tasks.Task.

Upvotes: 1

Ian Mercer
Ian Mercer

Reputation: 39297

It depends.

Given that you have an apparently sequential process, why use separate threads to read and then process the data? The simplest approach would be a single thread that loops around reading, processing it, and presumably waiting at some point so you aren't rate limited by the third party.

If however the processing takes a long time you might want to split the work between a single polling thread and a set of workers that process the data.

The simplest option is usually the right one for your initial implementation. Adding threads and WCF service calls before you need them is rarely the right thing to do.

To give a better answer you really need to supply more information: does the third party service limit how many calls you can make at once or how quickly you can make them, how long does the processing take, how often do you need to poll, ...

Upvotes: 2

Related Questions