从Azure Web App发送到Azure IoT中心设备时,消息挂起(超时)

时间:2015-12-18 17:53:58

标签: asp.net-mvc azure azure-web-sites iot

下面我将介绍一个处理设备通知逻辑的Azure Web App的一部分。我正在做的是从ASP MVC控制器调用下面显示的代码。 但是当我运行它时,我从浏览器获得一个挂起(永久挂起)的请求。

我以为我通过在BackgroundWorker线程中包装SendAsync调用找到了一种解决方法。它更好,但我不能正常工作。前几次(一两次)它可以正常工作,但随后再次发生,包装的线程会挂起。

代码与MSDN上的控制台应用程序的代码差别不大。我错过了什么?

using System.Web.Configuration;
using Microsoft.Azure.Devices;

namespace MyTest
{
    public class Sender
    {
        private readonly string connectionString;
        private readonly Microsoft.Azure.Devices.ServiceClient serviceClient;

        public Sender()
        {
            connectionString = WebConfigurationManager.AppSettings["ConnectionString"];
            serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
        }

        public async void SendRequest(string deviceId, string msgText)
        {
            var message = new Message();
            message.Properties.Add("text", msgText));

            await serviceClient.SendAsync(deviceId, message);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

问题是由于ASP MVC框架使用不当造成的。

事实证明,当使用长时间运行的async \ await时,必须使用AsyncController而不仅仅是Controller。管道必须始终是异步的。