views:

32

answers:

2

I am developing a component to create bespoke BulkImport functionality in ASP.NET. Underline this component will be using SqlBulkCopy class. There will be different file formats. The file is imported into a intermidiate table and is then transformed to the required tables. The upload file can be big and might take couple of minutes for processing. I would like to use Thread or Thead Pool to do asynchronous processing. Can you please suggest a good approach to handle this problem.

note: This is an internal application which would be used by max 2-5 person at any given time.

+1  A: 

The main problem with firing up additional threads in ASP.NET is that the framework can rip the AppDomain out from under you (for example, if someone edits the web.config or IIS decides to recycle the worker process). If that happens, your worker thread is also terminated and you can't really control it.

If you don't think that'll be a problem, then it doesn't really matter, but I would suggest that a better solution would probably be to fire up the work in a separate process that you can then monitor from your web application.

That way, if someone edits the web config, or IIS recycles the worker process, the import process is running independently and you don't have to worry.

Dean Harding
+1 spawning a thread from asp .net is meaningless, since the parent thread can be killed any second.
HeavyWave
Thanks for the guidance. Feed uploads will run under transaction so if the process recycles the feed should be rollback.
ARS
+1  A: 

Here is my approach:

  • Ask the user to paste in the unc path to the file. Save this path into a table in sql.
  • Write a windows service to check for new entries in the path table. When finding a new entry, start processing the file. Update the tabel periodicly with the progress and check flags (below)
  • Have an ajax callback in the browser that checks the table for progress, returning as a percentage to the client. Allow the client to stop the process by adding some flags to the table.
James Westgate