处理在ASP.NET中的MessageQueue的ReceiveCompleted事件时,我有一个问题。 它捕获它成功的,但施加到页面的没有效果的控制每变化。

这是我得到了什么:

.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_ReceiveCompleted)从服务器进行更新,对不对?如果它是如此它是不可能的。

我的建议是把一个客户端JS的功能,将通过计时器(每个第二左右)被调用,将发送一个异步AJAX请求用于在的MessageQueue新消息Web服务。如果存在这样的消息中的JS将采取任何行动需要(更新页面,等等)

其他提示

尝试设置的的UpdateMode = “始终”以您的UpdatePanel,或在<强> mq_ReceiveCompleted()方式的端呼叫UpdatePanel1.Update();

请确认您要更新的页面对象的正确实例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top