开发者

Session Variable being created and access before long process?

开发者 https://www.devze.com 2023-03-08 22:00 出处:网络
I have a page that executes a long process, parsing over 6 million rows from several csv files into my database.

I have a page that executes a long process, parsing over 6 million rows from several csv files into my database.

Question is just as when the user clicks "GO" to start processing and parsing 6 million rows I would like to set a Session Variable that is immediately available to the rest of my web site application so that any user of the web site knows that a user with a unique ID number has started parsing files without having to wait until the end of the 6 million rows processed?

Also with jQuery and JSON, I'd like to get feedback on a webpage as to which csv file is being processed and how many rows have been processed.

There could be other people parsing files at the same time, how could I track all of this and stop any mix up etc with other users even though there is no login or user authentication on the开发者_JS百科 site?

I'm developing in C# with .NET 4.0 Entity Framework 4.0, jQuery, and MS SQL 2008 R2.

I was thinking of using Session Variables however in my static [WebMethod] for my jQuery JSON calls I am not able to pull back my Session unless I'm using HttpContext.Current.Session but I am not sure how if this solution would work?

Any guidance or ideas would be mostly appreciated.

Thanks


First of all: Session variables are not supposed to be seen for any user everywhere. when some client connects to the server, there is a session made for them by the server, and next time the same user requests (within the expiration time of the session), the session (and it's variables) are usable.

You can use a static class for this if you intend to.

for example

public static class MyApplicationStateBag
{
    public static Dictionary<string,object> Objects {get; private set;}
}

and for your progress report. you can use a asp:Timer to check the progress percentage every second or two.

here is a sample code that I have written for asp:Timer within an UpdatePanel: Writing a code trigger for the updatepanel.

I suggest you use a Guid for identifying the current progress as the key to your state bag.


The correct way of doing this is via services, for example WCF services. You don't want to put immense load on the web server, which is not supposed to do that.

The usual scenario:

  • User clicks on GO button
  • Web server creates a job and starts this job on a separate WCF service
  • Each job has ID and metadata (status, start time, etc.) that is persisted to the storage
  • Web server returns response with job ID to the user
  • User, via AJAX (JQuery) queries the job in the storage, once completed you can retrieve results
  • You can also save Job ID to the session

P.S. it's not a direct answer to your question, but I hope it helps

0

精彩评论

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