2012-03-28 3 views
0
Ergebnis

ich ein Problem habe, um die beste Art und Weise zu gestalten, einen Duplex-WCF-Dienst von ASP.NET-Anwendung des Aufruf habe ich folgendes Szenario:-Update eine ASP.NET-Seite mit Duplex WCF-Service-Aufruf

1) Ich habe einen Duplex-WCF-Dienst mit einigen Operationen 2) Von einer ASP.NET-Webanwendung (die mein Client ist) mache ich die Standardseite implementieren die Callback-Schnittstelle und rufen Sie dann eine Methode aus dem Duplex-Dienst als sendend Handler des Rückrufs
3) Wenn der Rückruf zurückkehrt die default.aspx Seite Ich konnte das Ergebnis auf der Seite nicht zeigen, weil die ganzen HttpContext null ist, so kann ich keine Kontrolle oder Anwendung [] oder Session Zugriff [] Variablen

Hier ist der Code in der Default.aspx ist

[CallbackBehavior(UseSynchronizationContext = false)] 
public partial class _Default : System.Web.UI.Page, VehicleTrackingService.IDuplexServiceCallback 
{ 
    public _Default() 
    { 

    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     ThreadPool.QueueUserWorkItem(new WaitCallback(delegate 
     { 
      try 
      { 

       DuplexService client = new DuplexServiceClient(new InstanceContext(new_Default())); 
       switch (DropDownList1.SelectedItem.Value) 
       { 
        case "0": 
         { 
          client.Method1(int.Parse(txt_name.Text)); 
          break; 
         } 
        case "1": 
         { 
          lbl_res.Text = "Not Provided yet."; 
          break; 
         } 
        default: 
         { 
          lbl_res.Text = "Not Provided yet."; 
          break; 
         } 
       } 
      } 
      catch(Exception ex) 
      { 
      } 
     })); 
    } 

    public void DuplexCallbackFunction(string response) 
    { 
     // Wanna to show result (the response) from here ... 
    } 

Hilfe bitte?

+0

Dies ist eine etwas schlechte Wahl für die Verwendung von WCf Duplex-Services, aus der Perspektive Ihrer Kunden und architektonisch. Wenn Sie zum Abrufen von Daten eine Verbindung mit einem separaten WCF-Dienst herstellen müssen und eine Verzögerung zwischen dem Dienstanruf und der Antwort besteht, sollten Sie den Dienstanruf lieber an eine Hintergrundaufgabe übergeben und dann mit einem leichten AJAX-Aufruf von Ihrem Client abrufen für die zurückgegebenen Daten. Ihr Client verfügt über eine reaktionsfähige Benutzeroberfläche und Ihr Server verschwendet keine Ressourcen. – Lloyd

+0

Können Sie mir bitte ein Beispiel geben, weil ich es nicht bekommen konnte – DigitalFox

Antwort

0

Sie rufen den WCF-Dienst über die ASP.Net-Seite auf, während die Seite auf dem Server verarbeitet wird.

Das Problem dabei ist, dass die Seite für eine sehr kurze Zeit auf dem Server ist, vielleicht weniger als eine Sekunde. Anschließend wurde die Seite an den Browser zurückgegeben, bevor der WCF-Dienst geantwortet hat.

Wie Lloyd den Weg zur Behebung des Problems nannte, ist es, den Web-Service von Ihrem Browser aus mit AJAX anzurufen.

Für ein Beispiel, wie zu tun, sehen diese http://www.codeproject.com/Articles/128478/Consuming-WCF-REST-Services-Using-jQuery-AJAX-Call

0

Sie haben im Auge zu behalten, dass Ihre Anwendung eines Browser-Client besteht, die die ASP.NET-Anwendung als Server zugreift, und diese beiden kommunizieren über HTTP Anfragen und Antworten. Ihre ASP.NET-Anwendung hat wahrscheinlich eine HTTP-Antwort an den Browser gesendet, bevor der WCF-Dienst eine Nachricht an die ASP.NET-Anwendung zurücksendet.

Ich denke Shiraz und Lloyd haben einen ausgezeichneten Vorschlag gemacht; Versuchen Sie, den WCF-Dienst möglichst direkt über den Browser aufzurufen. This answer schlägt vor, dass möglicherweise Duplexkommunikation mit einem WCF-Dienst mit JavaScript ausgeführt werden kann.

Es gibt jedoch eine Reihe von Gründen, warum Sie dies nicht tun können, z. B. Anmeldeinformationen, Netzwerk-Firewall-Regeln oder einfach die Tatsache, dass die ASP.NET-Anwendung über die erforderlichen Daten zum Aufrufen des WCF verfügt Service und vielleicht möchten Sie diese Daten nicht dem Browser zur Verfügung stellen.

In diesen Fällen können Sie wählen, um komplizierte Lösungen zu implementieren, die die Verwendung von JavaScript im Browser umfassen, um den ASP.NET-Server nach Updates abzufragen. Es gibt mehrere Möglichkeiten, dies zu tun. Es gibt "kurze Umfragen" und "lange Umfragen". Es gibt auch ein relativ neues Feature namens WebSockets, aber ob Ihr Server und Ihr Zielbrowser WebSockets unterstützt, ist eine andere Frage.