Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8968157
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 15, 20262026-06-15T17:24:26+00:00 2026-06-15T17:24:26+00:00

I am trying to put a web interface on a lengthy server side process

  • 0

I am trying to put a web interface on a lengthy server side process which should send regular progress\statistic reports to the client as the process is running. How can I do this?

Here is what I have attempted so far. The session in the webmethod is null for as long as the loop is processing. Once the loop is finished and you press the start button again, it is able to pick up the session value and populate the label. How do I get this to send updates to the client while the process is running?

I am using VS2012 and ASP.NET 4.5.

EDIT: To be more specific, the problem occurs while the server is busy with the loop. If I take the loop away and simply try to pull a variable value from the server at regular intervals then there is no problem. Put that variable in a loop and try and fetch it at regular intervals and you’ll see what the problem is, the code I have posted should clarify the issue if you run it.

Thanks.

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ClientProgressTest.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script type="text/javascript">
        function GetCount() {

        $.ajax({
            type: "POST",
            url: "Default.aspx/GetCount",
            contentType: "application/json; charset=utf-8",
            data: {},
            dataType: "json",
            success: function (data) {
                lblCount.innerHTML = data.d;
            },
            error: function (result) {
                alert(result.status + ' ' + result.statusText);
            }
        });

        setTimeout(GetCount, 5000);
    }
</script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <label id="lblCount"></label>
        <br />
        <br />
        <asp:Button ID="btnGetCount" runat="server" Text="Get Count" OnClientClick="GetCount();" OnClick="btnGetCount_Click" />
    </div>
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ClientProgressTest
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod(EnableSession = true)]
        public static string GetCount()
        {
            string count = null;

            if (HttpContext.Current.Session["count"] != null)
            {
                count = HttpContext.Current.Session["count"].ToString();
            }

            return count;
        }

        protected void btnGetCount_Click(object sender, EventArgs e)
        {
            Session["count"] = null;

            for (int i = 0; i < 10000000; i++)
            {
                Session["count"] = i;
            }
        }
}
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-15T17:24:27+00:00Added an answer on June 15, 2026 at 5:24 pm

    I put a lengthy answer to this question here : How to update a status label inside ajax request

    For the sake of others being able to find the same solution i’ll paste the answer here too:

    ==================================================================================

    This example is using JQuery for the AJAX and the code-behind is in vb.net.

    Essentially what you need to do is make your first call to begin the long process, then make a second call, repeatedly, using a second method to get the status of the long one.

    AJAX

    This is your main call to the long process. If needed, you will need to pass in the data to the method. Notice there is a processName. This should be a random string of sorts to ensure that you get the status of this process only. Other users will have a different random processName so you don’t get confused status.

    JAVASCRIPT

        var processName = function GenerateProcessName() {
    
            var str = "";
            var alhpabet = "abcdefghijklmnopqrstuvwxyz";
            for (i = 1; i < 20; i++) {
                str += alhpabet.charAt(Math.floor(Math.random() * alhpabet.length + 1));
            }
            return str;
        }
    
    
        function StartMainProcess(){
        $j.ajax({
                type: "POST",
                url: "/MyWebservice.asmx/MyMainWorker",
                data: "{'processName' : '" + processName + "','someOtherData':'fooBar'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    if (msg.d) {                        
                        // do a final timerPoll - process checker will clear everything else
                        TimerPoll();
                    }
                }
            });
            TimerPoll();
         }
    

    Your second AJAX call will be to another method to get the progress. This will be called every XXX time by a timer method.

    This is the TimerPoll function; which will fire every 3 seconds in this case

    JAVASCRIPT

    function TimerPoll() {
            timer = setTimeout("GetProgress()", 3000)
        }
    

    And finally, the GetProgress() function to, well, get the progress. We have to pass in the same processName used above, to get the process of this users call only

    JAVASCRIPT

    function GetProgress() {
            // make the ajax call
            $j.ajax({
                type: "POST",
                url: "/MyWebService.asmx/MyMainWorkerProgress",
                data: "{'processName' : '" + processName + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
    
                    // Evaulate result..
                    var process = msg.d
    
                    if (process.processComplete) {
                        // destroy the timer to stop polling for progress
                        clearTimeout(timer);
    
                // Do your final message to the user here.                      
    
                    } else {
    
                       // show the messages you have to the user.
                       // these will be in msg.d.messages
    
                        // poll timer for another trip
                        TimerPoll();
                    }
            });
    
        }
    

    Now, in the back-end, you will have a couple of web methods that your AJAX communicates with. You will also need a shared/static object to hold all of the progress information, along with anything you want to pass back to the user.

    In my case, i created a class which has its properties filled and passed back with every call to MyMainWorkerProcess. This looks a little like this.

    VB.NET

        Public Class ProcessData
            Public Property processComplete As Boolean
            Public Property messages As List(Of String) = New List(Of String)
        End Class
    

    I also have a shared property using this class, which looks like… ( this shared property is capable of holding multiple process progresses by multiple users – hence the dictionary. the key of the dictionary will be the process name. All progress data will be in the class ProcessData

    Private Shared processProgress As Dictionary(Of String, ProcessData) = New Dictionary(Of String, ProcessData)
    

    My main worker function looks a little like this. Notice that we first make sure there isn’t another processProgress with the same

    VB.NET

    <WebMethod()> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
    Public Function MyMainWorker(ByVal processName as string, ByVal SomeOtherData as string) as Boolean
    
            '' Create progress object - GUI outputs process to user
            '' If the same process name already exists - destroy it
            If (FileMaker.processProgress.ContainsKey(processName)) Then
                FileMaker.processProgress.Remove(processName)
            End If
    
            '' now create a new process
            dim processD as ProcessData = new ProcessData() with {.processComplete = false}
    
    
            '' Start doing your long process.
    
            '' While it's running and after whatever steps you choose you can add messages into the processData which will be output to the user when they call for the updates
             processD.messages.Add("I just started the process")
    
             processD.messages.Add("I just did step 1 of 20")
    
             processD.messages.Add("I just did step 2 of 20 etc etc")
    
             '' Once done, return true so that the AJAX call to this method knows we're done..
            return true
    
    End Function
    

    now all that is left is to call the progress method..All this is going to do is return the dictionary processData that has the same processName we set up earlier..

    VB.NET

    <WebMethod()> _
        <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
        Public Function MyMainWorkerProgress(ByVal processName As String) As ProcessData
    
            Dim serializer As New JavaScriptSerializer()
    
            If (FileMaker.processProgress.ContainsKey(processName)) Then
                Return processProgress.Item(processName)
            Else
                Return New ProcessData()
            End If
    
        End Function
    

    And voila..

    So to recap..

    1. Create 2 web methods – one to do the long process and one to return it’s progress
    2. Create 2 separate calls to these web methods. The first is to the main worker, the second, which is repeated xx seconds, to one that will give the progress
    3. Output your messages to the user however you see fit…

    don’t shoot me if there are a few typos 🙂

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am trying to put xdebug on a centOS web server and to use
I'm trying to put together a contract-first web application using Spring-WS. I want to
I'm trying to put together a script to monitor the MSMQ on a server.
I'm trying to put a large table in a pdf file which will be
I am trying to put information available on the web, and to do so
Basically i've got a web service that i'm trying to put some kind of
I'm trying to put two web projects that needs to be installed in different
I'm currently trying to interface our new intranet (ASP-MVC) with the web front end
I'm trying to put web notifications in the title/tab screen of my webpage. So
I am trying to put 2 buttons on a web page, one floated to

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.