我们正在尝试探索 IoT Edge 中的 Azure 流分析。我们正在关注这教程。
我们已完成以下步骤:
- 创建了一个 Windows VM
- 创建了一台 Edge 设备
- 在 Azure 上创建 Stream Analytics 模块,配置输入、输出和查询
- 从 Azure Market Place 添加了模拟温度湿度传感器 Sensor
- 添加了 Azure 流分析模块
- 按照教程中所述配置路由并部署在 Edge 设备(Azure VM)中
通过使用命令,我可以看到设备(Windows VM)中的 4 个项目。模拟传感器正在发送数据,但未触发写入 ASA 作业的查询。在检查 edgeHub 的日志时,我们发现以下错误:
TLS 握手失败。,System.AggregateException:发生了一个或多个错误。 (无法识别提供给包的凭据)---> System.ComponentModel.Win32Exception:无法识别提供给包的凭据,位于 System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface secModule、String package、CredentialUse intent、SCHANNEL_CRED scc),位于 System.Net.Security.SslStreamPal.AcquireCredentialsHandle(CredentialUse credUsage、SCHANNEL_CRED secureCredential),位于 System.Net.Security.SslStreamPal.AcquireCredentialsHandle(X509Certificate certificate、SslProtocols protocol、EncryptionPolicy policy、Boolean isServer),位于 System.Net.Security.SecureChannel.AcquireServerCredentials(Byte[]& thumbPrint、Byte[] clientHello),位于 System.Net.Security.SecureChannel.GenerateToken(Byte[]输入、Int32 偏移量、Int32 计数、Byte[]& 输出)位于 System.Net.Security.SecureChannel.NextMessage(Byte[] 传入、Int32 偏移量、Int32 计数)位于 System.Net.Security.SslState.StartSendBlob(Byte[] 传入、Int32 计数、AsyncProtocolRequest asyncRequest)位于 System.Net.Security.SslState.ProcessReceivedBlob(Byte[] 缓冲区、Int32 计数、AsyncProtocolRequest asyncRequest)位于 System.Net.Security.SslState.StartReadFrame(Byte[] 缓冲区、Int32 readBytes、AsyncProtocolRequest asyncRequest)位于 System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest asyncRequest)--- 从先前引发异常的位置结束堆栈跟踪---在 System.Net.Security.SslState.ThrowIfExceptional() 处System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult) 在 System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result) 在 System.Net.Security.SslStream.EndAuthenticateAsServer(IAsyncResult asyncResult) 在 System.Net.Security.SslStream.<>c.b__50_2(IAsyncResult iar) 在 System.Threading.Tasks.TaskFactory1.FromAsyncCoreLogic(IAsyncResult iar, Func2 endFunction, Action1 endAction, Task1 promise, Boolean requireSynchronization) --- 内部异常堆栈跟踪结束 --- ---> (内部异常 #0) System.ComponentModel.Win32Exception (0x8009030D): System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface secModule, String package, CredentialUse intent, SCHANNEL_CRED scc) 在 System.Net.Security.SslStreamPal.AcquireCredentialsHandle(CredentialUse credUsage, SCHANNEL_CRED secureCredential) 在 System.Net.Security.SslStreamPal.AcquireCredentialsHandle(X509Certificate 证书, SslProtocols 协议, EncryptionPolicy 策略, Boolean isServer) 在 System.Net.Security.SecureChannel.AcquireServerCredentials(Byte[]& thumbPrint, Byte[] clientHello) 在 System.Net.Security.SecureChannel.GenerateToken(Byte[] 输入, Int32 偏移量, Int32 计数, Byte[]& 输出) 在 System.Net.Security.SecureChannel.NextMessage(Byte[] 传入, Int32 偏移量, Int32 计数) 在System.Net.Security.SslState.StartSendBlob(Byte[] 传入,Int32 计数,AsyncProtocolRequest asyncRequest) 在 System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) 在 System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 在 System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest asyncRequest) --- 从先前发生异常的位置结束堆栈跟踪 --- 在 System.Net.Security.SslState.ThrowIfExceptional() 在 System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult) 在 System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result) 在 System.Net.Security.SslStream.EndAuthenticateAsServer(IAsyncResult asyncResult) 在System.Net.Security.SslStream.<>c.b__50_2(IAsyncResult iar) 在 System.Threading.Tasks.TaskFactory1.FromAsyncCoreLogic(IAsyncResult iar、Func2 endFunction、Action1 endAction、Task1 promise、Boolean requireSynchronization)<---,1b20a2d4
我们在虚拟机中创建了 OpenSSL 证书并在 config.yaml 中进行了配置,然后在检查 ASA 手机或模拟传感器模块的日志时出现错误。