Architecture :: How To Process Data After Page Is Completely Loaded For The User
Aug 23, 2010
I have some logging that has to be done, which are some database update or inserts.
However this logging is of no importance to the user, so I only want to process the data/logs after the page is completed for the user.
As of now, if I process the data while the page is loading, I go from 1.4 to 2.0 speed (server side time processing of code), which is quite a bit comparing it is of no use to the user.
So I want this code only executed after that the page is complete.
I've been checking out Ajax, async pages etc, but the problem is it still gets executed before the page is rendered to the client, which means the client will have to wait longer then it is not being processed.
I've been checking out Threadpool.queueBackgroundWorker, however if I get it correct, this will still be executed before the page is shown to the user, as it has to complete before the prerender.
Then I thought about creating a new thread, and do the processing there, which would not have my page waiting to complete the data/logging.
However when I have 100 or 200 users loading pages at the same time, then that would mean I would be creating 200 threads on those loads, which I doubt will be good for performance. So if I want to solve this, I would have to create my own threadpool and only assign for example a max of 40 threads to it which can process the data.
All I want to get done, are some update/inserts into database after the page is rendered and shown to the user. I don't want the logging to slow down the pageload for the users obviously. I want that logging or no logging makes no difference to the pageloadtime for the user at all.
I have a page which includes serveral gridviews, pulling out data from my datasources. At this stage, the parameters are set withing the page, however it will use a querystring at the end of the url. Once the page is loaded, i then have an Email function calling a HTML reader, which basically captures the content of the page and pushes to the body of the email and then emails it out.
The issue i am having is where to place this stagement. I have tried to insert the email function in the Page (load complete) event, but it still seems to send out over 20 emails, which to me, means that the page hasnt finished? loading and is constantly calling the email function.
At this stage, i need this page to load .. i cant think of any other way, i can get the data sent to an email without the interim medium; the page.
I have been looking around for a solution for this problem that works across different versions of Windows Server & IIS, but so far I couldn't find a reasonable solution, what I need is some sort of a script or a command line tool, that takes a certificate file (pfx) for example and then either using the same script or tool find a way to configure one website to use this certificate.
I'm developing an ASP.NET application with C# and Ajax.I have a page that holds user controls loaded dynamically. I need to pass some data (integer values and some strings) to the user control that has been loaded dynamically.Now I use Session to pass these values, but I think I can use another way; something like VIEWSTATE or hidden input.What do you recommend me?The fact that I load the controls dynamically is important because controls are loaded on every postback, and I can't store any value on controls.
I am trying to add dynamically a user control I created to an aspx page after it is loaded. I tried sending an ajax request to a handler that used RenderControl function and sent back the control's html. I appended it to the DOM using javascript.
The problem is that some of the controls must go through their Page_Load function and that doesn't happen when using RenderControl function.
protected void Page_Load(object sender, EventArgs e) { LoadMyControl(Parameters); //Do it every page load to preserve it's state } protected void LoadMyControl(string parameters) { plchld.Controls.Clear(); Control userControl = LoadControl("TheUserControl.ascx"); userControl.ID = "userControl1"; plchld.Controls.Add(userControl); }
Now inside this control, when a button is clicked I want to update ,let's say a Label on the hosting page. What is the best way to do it? Custom event?
I have user control that inherits a base control class and these user controls are loaded using the LoadControl method, I can't seem to figure out how to raise events from user controls to the page that are dynamically loaded this way. Here is the delegate and event in the base user control class.
public delegate void SomeChangeEventHandler(object sender , SomeChangeEventArgs e); public event SomeChangeEventHandler SomeChangeEvent; public virtual void OnSomeChanged(SomeChangeEventArgs e) { if (SomeChangeEvent != null) { SomeChangeEvent(this, e); } }
Got a windows forms user control dll embedded in an asp page using the html form control object tag as it needs to run client side. The windows form control does something and then needs to redirect to a another aspx page passing a parameter obtained from a calculation in the windows form contro dll. Is the redirect possible from the windows form control (same session id needs to be used) since obviously you can't call response.redirect since its not part of the server side wep page.
I am trying to make a UserControl that have all data process, initialize data, ajax, all self contain into one control.So I can insert to anywhere on my Asp pages.But the problem is, the UserControl contains a Script Manager and the Page that contain that User Control has a Script Manager too, so Asp doesn't allow me to have two Script Manager in one page.In case like this, I wonder if UserControl can completely self contain?Or the proper way of using UserControl is just using it like a template, and all the data process, event handler I have to do on the page that contains the UserControl?
Edit: I would like to keep the infrastructure as is, so while the framework ideas are appreciated, please keep your suggestions centered on the context I have provided.
Background
I'm building a web-based application that dynamically loads plugins. Each plugin comes with a manifest file that contains its dll location, namespace, and type.
Right now I'm using System.Reflection.Assembly.LoadFile to load up the dlls based off the locations provided in the manifest files. Then I load the types and so on.
As an Aside: I may wind up changing to System.Reflection.Assembly.LoadFrom since I'll eventually be loading files from outside the bin directory. But if their is a better way (Assembly.Load or something), feel free to add that in as well
Problem
The problem is that Multiple plugins can potentially run off the same dll. So I wind up executing System.Reflection.Assembly.LoadFile("Identical.dll") multiple times.
I have the idea to check if my assembly has already been loaded by iterating through AppDomain.CurrentDomain.GetAssemblies(), but I don't know if that will help with performance (or if it will work period, I haven't tried it).
Also, I can't keep a list of loaded assemblies due to the project's design constraints (though you may argue that it's a poor design: I can't change it, even if I wanted to OR agreed with you... so please don't press the issue.
Ultimately my goals are:
Don't ever re-load the same assembly twice. Performance is key.
I am not sure exactly which topic this post should go under...
Here is what I am doing.
I have a web form where a person will edit their blog article. At some point, once they are done editing, they can click a button "Publish Blog Now".
Once the blog is published in the click event on the server side I am doing a query to get a list of subscriber email address.
These are people who subscribed to this blogger and wish to receive an email notification whenever this person publishes a new blog.
What I just realized today is that my hosting provider only allows me to send a maximum of 200 emails per hour. Which means in my loop I need to sleep for roughly 20 seconds between each email notification sent. But I dont want the user who clicked the publish button to have to sit there and wait while that process is going.
How can I return to the user but yet continue to run some code on the server side to send out the emails in the background even if user closes web browser?
This is an ASP.NET web application targeting .net 4.0 and I am using c# as my back-end language and VS2010 as my development tool.
Coming to my task, I have to schedule a process which will delete all the files in the paticular table with particular key.I have the stored procedure for the deletion. What all I need is, How to schedule this process in the application server.?
I am in the process of creating an audit trail system. Simple enough. Certain fields require audit trail. What is the best design concept to allow this to work in multiple applications without having to change much? I would of course leave it to the admin of the site to add what fields should be audited, but the logic is the problem. Would implementing the interface IComparable be a place to start? My initial thinking is to compare 2 arrays against eachother and do an insert of what fields are in question. Array1 are the fields in the form, array2 are the fields from the sql table that require auditing.
My web application currently requires users to upload files, after which I take it for "further processing". This processing is VERY time consuming and can take a while before the control gets back to the user. I would like to run this in the background and not have the user wait until this completes.
I know this question has been asked in this very forum before but I'm not able to understand or I'm not able to proceed in the right direction. My understanding is there are a few ways I can go about this
a) create a BackgroundWorker process in my Global.asax file that will spawn a process and take care of the activity.
b) create a web service that will do the processing for me .. (how?)
I am using the original masterpage template in VS2010 to have a consitency with all my web pages for my site. However, i noticed that the web page does not fill the browser completely, it is much smaller. How can I adjust the size of the web page so that is fills the browser completely?
I have looked at all the options in properties but had no luck so far!
In my default.aspx page I have a PlaceHolder control within an UpdatePanel. In this placeholder control I will dynamically load a web user control, which is just a form with a submit button. On this user control, I have the form within an update panel and I have the "Submit" button's Click Event added to the triggers.
When I submit the form, the UpdatePanel on the web user control nor the update panel on the default.aspx page are capturing the post back, thus causing a full post back which refreshes my page.
how to capture this post so its rendered in Ajax and not a full post back?
What I have is a masterpage with some tables and contentplaceholders. What I want in some pages is that a table be removed because i have 3 columns on 3 tables and i need 2 columns only(so minus one table). Now i can access the table and give it some css through code but what i give is width:0 (and visibility:hidden if ever successful). The table contains one contentplaceholder inside a <td>. I can also access the td.The problem is that the table (thus contentplaceholder) will not go away.
It remains as entity as extending the second column will just push it downside(behavior expected when the column3 with contentplaceholder is present). So is there a way to remove the table holding the contentplaceholder?Only thought is to hide it and push it right that i admit i haven't tried it yet, I suppose it would be easier to make another master page but the problem is that i want specific designs on many pages so if this does not work i would either have to make many master pages or just use simple pages.
I need to trigger a C# code behind function right after an ASP.NET page is completely displayed. Is there an event to program? If not, do how to do it?
I have a [WebMethod] within an aspx.cs file. It seems that whenever a second call to the method is made via AJAX before the first call is fully executed, the web method completely stops functioning until the page is reloaded.