سؤال

لدي مشكلة عند التعامل مع الحدث الذي تم إكماله من messagequeue في ASP.NET. إنه يمسكها بنجاح ، لكن كل التغييرات المطبق على عناصر التحكم في الصفحة ليس لها أي تأثير.

هذا ما لدي:

.aspx

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
   <ContentTemplate>
       <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
       <br />
       <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
   </ContentTemplate>
</asp:UpdatePanel>

<asp:Timer ID="Timer1" runat="server" Interval="3000" ontick="Timer1_Tick">
</asp:Timer>

.CS

private static System.Messaging.MessageQueue queue;
private static String messageContent;

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    queue = new MessageQueue(@".\Private$\MyQueue");
    queue.ReceiveCompleted += new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
    queue.BeginReceive();
}


protected void mq_ReceiveCompleted(object sender, System.Messaging.ReceiveCompletedEventArgs e)
{

    System.Messaging.Message message = queue.EndReceive(e.AsyncResult);
    message.Formatter = new System.Messaging.XmlMessageFormatter(new string[] { "System.String,mscorlib" });

    Label1.Text = message.Body.ToString();      //Has no effect. The value updates without problem, but doesn't persist after finishing this method. And the Page doesn't refresh with this new value.
    Label2.Text = DateTime.Now.ToString();      //Has no effect too.
    Timer1.Interval = 99999;                    //And this one the same, no effect.
    messageContent = message.Body.ToString();   //.. But the value stored in this variable does persist

    queue.BeginReceive();
}

أنا لا أفعل لماذا يفشل في تحديث تلك الجامعات. قد يكون أي شيء nonesense ، لكنني جديد على ASP.NET ، لذلك سيكون أي فكرة موضع ترحيب.

شكرا لك مقدما!

بابلو

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

المحلول

تريد تحديث صفحة العميل بواسطة الأمر (الناجم عن MQ_RECEIVECOPTED) من الخادم ، أليس كذلك؟ ليس من الممكن إذا كان الأمر كذلك.

اقتراحي هو وضع وظيفة عميل JS التي سيتم استدعاؤها بواسطة Timer (كل ثانية أو نحو ذلك) وسوف ترسل طلب Async Ajax إلى خدمة الويب للحصول على رسائل جديدة في MessageQueue. إذا كانت هذه الرسالة موجودة ، فستتخذ JS أي إجراءات مطلوبة (تحديث الصفحة ، إلخ)

نصائح أخرى

حاول تعيين updatemode = "دائما" إلى UpdatePanel ، أو اتصل UpdatePanel1.Update(); في نهاية MQ_RECEIVECOPTED () طريقة.

تحقق من أنك تقوم بتحديث المثيل الصحيح لكائن الصفحة.

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