Frage

Ich habe ein Problem, wenn die ReceiveCompleted Falle eines Message in ASP.NET Handhabung. Es fängt es erfolgreich, aber alle Änderungen, die an die Steuerung der Seite keine Wirkung haben.

Das ist, was ich habe:

.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();
}

Ich weiß nicht, warum es fehlschlägt Aktualisierung diejenigen Vars. Es kann eine beliebige sein nonesense, aber ich bin neu in ASP.NET, so wird jeder Anhaltspunkt willkommen sein.

Vielen Dank im Voraus!

Pablo

War es hilfreich?

Lösung

Sie wollen, dass die Client-Seite durch den Befehl aktualisiert werden (verursacht durch mq_ReceiveCompleted) vom Server, nicht wahr? Es ist nicht möglich, wenn es so.

ist mein Vorschlag, eine Client-JS-Funktion zu setzen, die durch Timer aufgerufen werden (jede Sekunde oder so) und wird eine Asynchron-AJAX-Anforderung an den Web-Service für neue Nachrichten in Message senden. Wenn eine solche Nachricht vorhanden nehmen die JS alle Aktionen erforderlich (die Seite zu aktualisieren, usw.)

Andere Tipps

Versuchen Sie die Update = "Always" , um Ihre Update Einstellung oder Anruf UpdatePanel1.Update(); am Ende der mq_ReceiveCompleted () Methode.

Überprüfen Sie, ob Sie die richtige Instanz der Seite Objekt aktualisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top