2017-09-05 1 views
0

Dies ist ein Controller-Code einer Azure Web App, der eine Gerätebenachrichtigungslogik verarbeitet. Was ich mache, ruft den unten gezeigten Code von einem ASP MVC Controller auf. Aber wenn ich es ausführe, bekomme ich eine immer ausstehende Anfrage vom Browser (es hängt). Ich habe eine Schaltfläche in Sicht, wenn sie geklickt wird, ruft sie die Wakeup-Methode im Controller auf.Anwendung hängt beim Senden von der MVC-Webanwendung an Azure IoT Hub-Gerät

Der Code unterscheidet sich nicht von dem auf MSDN für eine Konsolenanwendung. Was vermisse ich?

using System.Text; 
using Microsoft.Azure.Devices; 

public class MyTemplate2Controller : Controller 
    { 
     static ServiceClient serviceClient; 
     static string connectionString = "HostName=azure-devices.net;SharedAccessKeyName=iothub;SharedAccessKey=mrUPt*2318C18K3LUk+oFarkNQ4vRvHrOa/eg="; 

     private AsyncController Task SendCloudToDeviceMessageAsync() 
     { 
      var asd = "{13A20041677B0,4,15,0}"; 
      var commandMessage = new Message(Encoding.ASCII.GetBytes(asd)); 
      return await serviceClient.SendAsync("Test_Comp_Dev_1", commandMessage).ConfigureAwait(continueOnCapturedContext: false); 
     } 
     public void Wakeup() 
     { 

      serviceClient = ServiceClient.CreateFromConnectionString(connectionString); 

      SendCloudToDeviceMessageAsync().Wait(); 
     } 
+0

Diese Frage ist zu allgemein, empfehle ich Ihnen versuchen, eine Remote-Debug-Sitzung tun, um zu sehen, wo genau der Code versagt. https://docs.microsoft.com/en-us/visualstudio/debugger/remote-debugging-azure –

Antwort

1

versuchen Sie Folgendes:

public void Wakeup() 
    { 
     serviceClient = ServiceClient.CreateFromConnectionString(connectionString); 

     System.Threading.ThreadPool.QueueUserWorkItem(a => SendCloudToDeviceMessageAsync().Wait()); 
    } 
+0

Es funktioniert. Kannst du erklären, was das Problem war? – TheChosenOne94

+0

Das Problem war in der Wartezeit innerhalb der Synchronisierungsmethode. Das Verwenden der ThreadPool.QueueUserWorkItem war eine schnelle Abhilfe für die Methode. Die bessere Lösung ist die Verwendung eines asynchronen Controllers. Weitere Informationen finden Sie unter https://msdn.microsoft.com/en-us/library/ee728598%28v=vs.100%29.aspx, https://stackoverflow.com/ Fragen/20227401/using-await-task-async-hängt-Controller-in-mvc-app –

Verwandte Themen