كيف يمكنك قياس التقدم المحرز من خدمة الإنترنت من المكالمة ؟

StackOverflow https://stackoverflow.com/questions/135478

سؤال

لدي ASP.NET خدمة ويب التي لا بعض الأحمال الثقيلة ، مثل قول بعض الملفات العمليات ، أو توليد Excel ورقة من مجموعة من تقارير crystal.أنا لا أريد أن يكون قد تم حظره عن طريق استدعاء خدمة ويب هذه ، لذلك أريد أن استدعاء خدمة ويب غير متزامن.أيضا أريد أن نسمي هذا خدمة ويب من صفحة ويب وتريد بعض الآليات التي تسمح لي للحفاظ على الاقتراع الخادم حتى أستطيع أنا يمكن أن تظهر بعض المؤشرات من التقدم على الشاشة مثل عدد الملفات التي تمت معالجتها.يرجى ملاحظة أن أنا لا أريد إشعار على الانتهاء من شبكة الإنترنت استدعاء الأسلوب, بل أريد يعيش حالة التقدم.كيف يمكنني ذلك ؟

هل كانت مفيدة؟

المحلول

كتابة منفصلة الأسلوب على الملقم الذي يمكنك الاستعلام عن طريق تمرير معرف الوظيفة التي كان من المقرر والتي بإرجاع القيمة التقريبية بين 0-100 (أو 0.0 و 1.0, أو أيا كان) من مدى هو عليه.

E. g.في بقية الطراز ، يمكن تقديم طلب الحصول على http://yourserver.com/app/jobstatus/4133/ الذي سيعود بسيطة '52' كما text/plain.ثم لديك فقط للاستعلام أن كل (الثانية ؟ ثانيتين ؟ عشر ثواني؟) لنرى إلى أي مدى هو عليه.

كيف كنت في الواقع إنجاز الرصد على الخلفية بشكل كبير يعتمد على ما تبذلونه من العملية هو وكيف يعمل.

نصائح أخرى

أعتقد أن خدمة ويب XML بطيئة ، لذلك خلق أساليب متعددة ، الاقتراع التقدم سوف يكون بطيئة للغاية وسوف تولد ضخمة التحميل على الخادم.أنا لن تفعل ذلك في بيئة الإنتاج.أرى نفس (أصغر) مشاكل مع قاعدة بيانات الاقتراع.

محاولة الصابون امتداد بدلا من ذلك.وتنفذ الحدث يحركها نموذج.انظر إضافة شريط التقدم إلى خدمة ويب تطبيق العميل على MSDN.

يمكنك أيضا استخدام SoapExtensions إلى إخطار العميل من تحميل/عملية التقدم.الملقم ثم يمكن إرسال الأحداث إلى العميل.لا شيء في العميل إلى تغيير إذا كنت لا تستخدم عليه.

يسمح شيئا مثل هذا في العميل الخاص بك:

//...
private localhost.MyWebServiceService _myWebService = new localhost.MyWebServiceService ();
_myWebService.processDelegate += ProgressUpdate;
_myWebService.CallHeavyMethod();
//...

private void ProgressUpdate(object sender, ProgressEventArgs e)
{
  double progress = ((double)e.ProcessedSize / (double)e.TotalSize) * 100.00;
  //Show Progress...
}

وقد الأولي "بداية جيل تقرير" استدعاء خدمة ويب إنشاء مهمة في بعض المهام مسبح و العودة المتصل معرف المهمة.

ثم توفير طريقة أخرى أن ترجع "في المئة به" معين taskId.

توفر الطريقة الثالثة التي تقوم بإرجاع النتائج الفعلية عن إكمال المهمة.

أسهل طريقة أن يكون لديك على خدمة ويب تحديث حقل في قاعدة البيانات مع تقدم الدعوة ، ومن ثم إنشاء خدمة ويب التي الاستفسارات هذا المجال و ترجع قيمة.

جعل شبكة الإنترنت خدمة للعودة نوعا من مهمة معرف أو معرف جلسة العمل.جعل آخر ويب طريقة الاستعلام مع أنه معرف ، والتي ترجع المعلومات المطلوبة (% الانتهاء قائمة الملفات ، أيا كان).استطلاع هذا الأسلوب في بعض فترة من العميل.

استخدم قاعدة بيانات مخزن معلومات عملية, إذا كنت تفعل هذا في الذاكرة من خدمة ويب ، وهذا ليس مقياس جيد في الويب البيئة الزراعية, كما قد يحدث أن مهمة يعمل على ملقم آخر من واحد كنت الاقتراع.

تحرير:لقد رأيت آخر مماثل الإجابة و التعليق عليه.المعلق هو الحق - يمكنك استخدام في الذاكرة الجدول لتجنب عمليات القرص, ولكن لا تزال تستخدم منفصلة db server.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top