Windows IoTをインストールしたRaspberry Pi 2でAzure IoT Hubにメッセージを送ろうとしたら次のような例外が出た。
string uri = "<Azure IoT Hub URI>";
string deviceId = "<DeviceID>";
string deviceKey = "<DeviceKey>";
var deviceClient = DeviceClient.Create(
uri,
new DeviceAuthenticationWithRegistrySymmetricKey(deviceId, deviceKey),
TransportType.Http1);
var message = new Message(Encoding.UTF8.GetBytes("Test Message"));
await deviceClient.SendEventAsync(message);
例外:Microsoft.Azure.Devices.Client.Exceptions.UnauthorizedException
メッセージ:{"Message":"The specified SAS token is expired"}
どうもこの例外はWindows IoTデバイスの時刻が大きくずれていると発生するようだ。
対処方法
デバイスの時刻を正しいものにすればいいので、下の自分の記事にあるように時刻同期を行ったら正常にメッセージを送れるようになった。