2016-09-18 2 views
6

Ich arbeite tatsächlich an einer Webanwendung (ASP.NET MVC), die Befehl an eine Thick-Client-Anwendung (die ich nicht ändern kann) in einem lokalen Netzwerk in TCP/IP sendet. Ich brauche, dass die Thick-Client-Anwendung auf meinen Befehl antwortet oder mir Informationen gibt, so dass die Verbindung ständig geöffnet sein muss. Ich erstelle eine Schleife, die die Server-Antwort wie die überprüft:TCP/IP Clientseitige Schleife .NET

public static async void getMessage() 
     { 
      while(true) 
      { 
       // Buffer to store the response bytes. 
       Byte[] data = new Byte[100000]; 

       // String to store the response ASCII representation. 
       String responseData = String.Empty; 

       // Read the first batch of the TcpServer response bytes. 
       Int32 bytes = await stream.ReadAsync(data, 0, data.Length); 
       if (bytes == 0) continue; 
       responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); 
       Debug.Write(responseData); 

       await stream.ReadAsync(data, 0, data.Length); 
      } 
     } 

, die tatsächlich funktionieren, und ich erhielt die Antwort vom Server, aber der Browser wird die ganze Zeit „für localhost warten“, so gibt es ein besseres Möglichkeit, das zu tun, ohne die Schleife im Browser?

Vielen Dank!

Antwort

5

Das klingt nach einem wirklich guten Fall für eine WebSocket. In einer MVC App würden Sie normalerweise SignalR verwenden: http://www.asp.net/signalr

+0

Zuerst danken Sie für Ihre Zeit @dperish. Ich habe noch eine Frage (vielleicht eine dumme Frage ...) Die Webanwendung wird auf einem Server "deployed", um nur im lokalen Netzwerk ohne Internet verwendet zu werden. Wird das ein Problem mit dem Signalgeber sein? –

+0

Nein, dies sollte nicht von Bedeutung sein, solange Sie die SignalR-Pakete auf Ihrem Intranetserver bereitgestellt haben. Wenn Sie über NuGet installiert haben ('Install-Package Microsoft.AspNet.SignalR'), sollte es korrekt verpackt/bereitgestellt werden – dperish