ورود

View Full Version : backgroundprocess in asp.net



sama552
دوشنبه 23 فروردین 1389, 07:48 صبح
باسلام
میخوام background process رو در asp.net پیاده سازی کنم به اینصورت که عملیات با sql به صورت مولتی ترید انجام بشه مثلا وقتی کاربر با یک قسمت برنامه کار می کند همزمان اطلاعات قسمت دیگر هم لود شود
لطفا راهنمایی کنید

Vahid_moghaddam
دوشنبه 23 فروردین 1389, 08:35 صبح
می تونید از AJAX WebService ها استفاده کنید

sama552
دوشنبه 23 فروردین 1389, 08:51 صبح
می تونید از AJAX WebService ها استفاده کنید
ممنون ولی من با AjaxWebserviceآشنایی ندارم میشه بیشتر توضیح بدید یا لینکی رو در این زمینه معرفی کنید

Vahid_moghaddam
دوشنبه 23 فروردین 1389, 09:01 صبح
http://www.asp.net/AJAX/Documentation/Live/Tutorials/ConsumingWebServicesWithAJAXTutorial.aspx

Vahid_moghaddam
دوشنبه 23 فروردین 1389, 09:02 صبح
http://dotnetslackers.com/columns/ajax/ASPNETAjaxWebService.aspx

amirjalili
دوشنبه 23 فروردین 1389, 09:10 صبح
شما باید از BackgroundWorker استفاده کنید.
در مورد BackgroundWorker منابع بسیاری حتی توی همین سایت وجود داره.
این یک نمونه.
http://softprojects.org/fa/KB/Articles/DesktopMisc/BackgroundWorker.aspx

Vahid_moghaddam
دوشنبه 23 فروردین 1389, 10:11 صبح
شما باید از BackgroundWorker استفاده کنید.
در مورد BackgroundWorker منابع بسیاری حتی توی همین سایت وجود داره.
این یک نمونه.
http://softprojects.org/fa/KB/Articles/DesktopMisc/BackgroundWorker.aspx
استفاده از BackgroundWorker ایده خیلی خوبی نیست

Any thread that is long running is in danger of being killed when the worker process recycles

http://stackoverflow.com/questions/57845/backgroundworker-thread-in-asp-net

http://forums.asp.net/t/1141831.aspx

sama552
دوشنبه 23 فروردین 1389, 11:13 صبح
شما باید از BackgroundWorker استفاده کنید.
در مورد BackgroundWorker منابع بسیاری حتی توی همین سایت وجود داره.
این یک نمونه.
http://softprojects.org/fa/KB/Articles/DesktopMisc/BackgroundWorker.aspx
این نمونه ای که فرستادید برای windows formاست نمونه ای برای asp.net دراین مورد ندارید

Vahid_moghaddam
دوشنبه 23 فروردین 1389, 11:58 صبح
اینجا یه مثال هست. اما روش خیلی خوبی نیست

http://www.codeproject.com/KB/web-cache/NETBackgroundWorker.aspx

amirjalili
دوشنبه 23 فروردین 1389, 12:01 عصر
استفاده از BackgroundWorker ایده خیلی خوبی نیست
Any thread that is long running is in danger of being killed when the worker process recycles


دلیل بهتری اگر دارید بیارید یا دلیل بالا رو بیشتر توضیح بدید.
دلایلی برای مزایاش هست که دلایل بزرگی هم هست.

BackgroundWorker offers a simplified programming model.

It uses threads from the CLR thread pool.

It marshals its events on the UI thread.

It is most useful in UI applications.

You might want to take a look at "Asynchronous Programming Design Patterns" in MSDN.

اینکه وقتی یک thread بیش از حد زمانی کارش طول بکشه در زمان از بین رفتن فرایند در خطر از بین رفتن هست چقدر ممکنه ایراد بزرگی باشه؟ کجا نباید از این روش استفاده یشه و کجا نه؟

به هر حال من نمونه کدش رو برای صفحات وب قرار میدهم.



using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.ComponentModel;
using System.Threading;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;

public partial class BackgroundWorker_Default : System.Web.UI.Page
{
public string result = "";
protected void Page_Load(object sender, EventArgs e)
{

}

public BackgroundWorker worker = new BackgroundWorker();
void worker_DoWork(object sender, DoWorkEventArgs e)
{
DirectoryInfo primaryDir = e.Argument as DirectoryInfo;
int i = 0;
foreach (DirectoryInfo dir in primaryDir.GetDirectories())
{
foreach (FileInfo file in dir.GetFiles())
{
worker.ReportProgress(i++, file.FullName);

}
}
}



void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
ListBox1.Items.Add(e.ProgressPercentage.ToString() + " : " + e.UserState.ToString());

}



protected void Button1_Click1(object sender, EventArgs e)
{

worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged );
worker.RunWorkerAsync(new DirectoryInfo(@"C:\Windows"));


}
}

sama552
دوشنبه 23 فروردین 1389, 13:12 عصر
دلیل بهتری اگر دارید بیارید یا دلیل بالا رو بیشتر توضیح بدید.
دلایلی برای مزایاش هست که دلایل بزرگی هم هست.

BackgroundWorker offers a simplified programming model.

It uses threads from the CLR thread pool.

It marshals its events on the UI thread.

It is most useful in UI applications.

You might want to take a look at "Asynchronous Programming Design Patterns" in MSDN.

اینکه وقتی یک thread بیش از حد زمانی کارش طول بکشه در زمان از بین رفتن فرایند در خطر از بین رفتن هست چقدر ممکنه ایراد بزرگی باشه؟ کجا نباید از این روش استفاده یشه و کجا نه؟

به هر حال من نمونه کدش رو برای صفحات وب قرار میدهم.



using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.ComponentModel;
using System.Threading;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;

public partial class BackgroundWorker_Default : System.Web.UI.Page
{
public string result = "";
protected void Page_Load(object sender, EventArgs e)
{

}

public BackgroundWorker worker = new BackgroundWorker();
void worker_DoWork(object sender, DoWorkEventArgs e)
{
DirectoryInfo primaryDir = e.Argument as DirectoryInfo;
int i = 0;
foreach (DirectoryInfo dir in primaryDir.GetDirectories())
{
foreach (FileInfo file in dir.GetFiles())
{
worker.ReportProgress(i++, file.FullName);

}
}
}



void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
ListBox1.Items.Add(e.ProgressPercentage.ToString() + " : " + e.UserState.ToString());

}



protected void Button1_Click1(object sender, EventArgs e)
{

worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged );
worker.RunWorkerAsync(new DirectoryInfo(@"C:\Windows"));


}
}








مرسی ولی برنامتون این error رو میده
Asynchronous operations are not allowed in this context. Page starting an asynchronous operation has to have the Async attribute set to true and an asynchronous operation can only be started on a page prior to PreRenderComplete event.

amirjalili
دوشنبه 23 فروردین 1389, 14:36 عصر
error نداره. طبیعیه که شما برای اینکه از async در صفحه خود استفاده کنید باید async=true قرار بدید.
به صورت زیر:


<%@ Page Async="true" Language="C#"