I’m designing an ASP.NET 4.0 Web application where administrators may create an auction with an expiration. The expiration time would be stored in a database. How can I ensure that the auction ends at the predetermined time, considering the fact that an application instance may not be running when it is time? The application will be hosted with IIS7. I am considering Windows service, but I am wondering what other options are out there.
I’m designing an ASP.NET 4.0 Web application where administrators may create an auction with
Share
A windows service that handles the timed events would be the best practice. Using a System.Threading.Timer in ASP.NET is bad juju; it MIGHT work in your case, because the change being made doesn’t affect the UI directly, but I wouldn’t bet on it working flawlessly. If you need to schedule events in the background of a web app, use a server app.
One thing to keep in mind; you may have hundreds or thousands of open auctions at a time. If you set a timer on every auction when it’s opened, you’ll have hundreds or thousands of sleeping threads managed by this server. I’d look only for auctions that would end before the next time you’d normally poll, and set timers for those auctions only. That would get you down to maybe a few dozen waiting threads. If you’re writing the next eBay, though, even this will choke when you get hundreds of thousands, or millions, of auctions, and several hundred or thousand begin and end every minute.