[IOT]'System.NullReferenceException' in Microsoft.Azure.Amqp.Uwp.dll

我們使用 Azure IOT Hub 來送命令給 RPi 去開門,

忽然有一天我們的 UWP 程式居然直接掛點了,

是掛在讀取 Azure IOT Hub 的 Message 那裡(deviceClient.ReceiveAsync()),

錯誤是「'System.NullReferenceException' in Microsoft.Azure.Amqp.Uwp.dll」。

測試程式如下,

try
{
	ReceiveC2dAsync().ConfigureAwait(false);
}
catch (Exception ex)
{
	System.Diagnostics.Debug.WriteLine(ex.ToString());
}
private static async Task ReceiveC2dAsync()
{
	DeviceClient deviceClient = DeviceClient.CreateFromConnectionString(
	"HostName=gsstddhub.azure-devices.net;DeviceId=0521;SharedAccessKey=keys"
	, TransportType.Amqp);
	while (true)
	{
		Message receivedMessage = null;
		try
		{
			receivedMessage = await deviceClient.ReceiveAsync();
		}
		catch (Exception ex)
		{
			System.Diagnostics.Debug.WriteLine(ex.ToString());
		}
		if (receivedMessage == null) continue;
		await deviceClient.CompleteAsync(receivedMessage);
	}
}

明明就有用 Try ... Catch 去攔呀!

為什麼會跳出我的 Try ... Catch 呢?  讓程式直接掛掉,如下,

進入 Azure Portal 才發現原來是因為訂閱的$沒了,所以服務就不能Run了。

原本 TransportType 是使用  Amqp ,當我改成了 Http 後,

就可以攔到錯誤了!!!

'Microsoft.Azure.Devices.Client.Exceptions.QuotaExceededException' in mscorlib.ni.dll

但改用 Amqp 就會攔不到。

後來上 github 上詢問原來是 Microsoft.Azure.Amqp.Uwp.dll 的 Bug ,已修好了,

So ... 就等它的新版本吧!

詳細可以參考「How to handle Microsoft.Azure.Devices.Client exception at UWP app, when TransportType set Amqp ?

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^