You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用ProvisioningDeviceClient.RegisterAsync时异常及应用崩溃问题

DPS设备注册异常排查

问题概述

使用Azure DPS设备注册客户端时,先后遇到两个版本的异常:

  • 版本1.5.2:抛出方法未找到异常
  • 版本1.19.2:方法未找到异常消失,但应用直接崩溃且异常未被捕获

注册设备方法实现

public async Task<DeviceRegistrationResult> RegisterDevice(ProvisioningDeviceClient provClient)
{
    DeviceRegistrationResult registrationResult = null;
    try
    {
        registrationResult = await provClient.RegisterAsync().ConfigureAwait(false);

        if (registrationResult.Status != ProvisioningRegistrationStatusType.Assigned) {
            

        }
       
    }

    catch (Exception ex)
    {
       
    }
    return registrationResult;
}

方法调用代码

var deviceRegistrationResult = await _dpsDeviceClient.RegisterDevice(provClient);

版本1.5.2的异常信息

System.MissingMethodException: 'Method not found: 'System.Threading.Tasks.Task`1<Microsoft.Azure.Devices.Provisioning.Client.DeviceRegistrationResult> Microsoft.Azure.Devices.Provisioning.Client.ProvisioningDeviceClient.RegisterAsync()'.'

版本1.19.2的异常表现

升级到1.19.2后,上述方法未找到的异常消失,但应用直接崩溃,且RegisterDevice方法中的catch(Exception ex)块未捕获到任何异常。


ProvisioningDeviceClient创建代码

using (var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.WebSocketOnly))
{
provClient = ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, "MyIdScope",
                 security, transport);
}

注:出于安全考虑,未提供真实的MyIdScope。

项目文件(.csproj)内容

<Project Sdk="Microsoft.NET.Sdk">

 <PropertyGroup>
 <OutputType>Exe</OutputType>
 <TargetFramework>netcoreapp3.1</TargetFramework>
 </PropertyGroup>

 <ItemGroup>
 <PackageReference Include="Microsoft.Azure.Devices.Provisioning.Client" Version="1.19.2" />
  <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.1" />
  <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.1" />
  <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.1" />
  <PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
 <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ConnectivityLibrary\ConnectivityLibrary.csproj" />
</ItemGroup>

<ItemGroup>
<None Update="appsettings.json">
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>

额外发现的内部异常

调试时观察到provClient对象存在如下内部异常:

'((Microsoft.Azure.Devices.Shared.DefaultWebProxySettings)provClient._transport.Proxy).Credentials' threw an exception of type 'System.NotSupportedException'


排查与解决建议

  1. 补全异常捕获日志:先在RegisterDevice的catch块中添加日志输出(当前为空),确认是否真的没有捕获到异常,或者异常来自异步上下文之外。
  2. 检查上层调用逻辑:确认调用RegisterDevice的代码是否存在同步阻塞异步方法的情况(比如使用.Wait()/.Result),这种场景会导致未观察到的任务异常,引发应用崩溃。
  3. 处理代理异常:针对DefaultWebProxySettings.Credentials的NotSupportedException,可以显式禁用代理或配置自定义代理:
    using (var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.WebSocketOnly))
    {
        transport.Proxy = null; // 禁用自动代理检测
        provClient = ProvisioningDeviceClient.Create(GlobalDeviceEndpoint, "MyIdScope", security, transport);
    }
    
  4. 排查依赖版本冲突:检查引用的ConnectivityLibrary项目是否依赖了旧版本的Microsoft.Azure.Devices.Provisioning.Client,导致版本不一致。可以在主项目中添加强制版本配置:
    <PackageReference Include="Microsoft.Azure.Devices.Provisioning.Client" Version="1.19.2" PrivateAssets="all" />
    

内容的提问来源于stack exchange,提问作者kudlatiger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:45:31