如何从另一个模块在物联网边缘代理上调用直接方法?

问题描述

我正在试用1.0.10-rc2中的实验功能。

edgeAgent UploadModuleLogs上有直接方法。

我可以从Azure门户调用该方法,并且效果很好。 我正在尝试从同一设备上的模块中调用该方法,如下所示:

static async Task Init()
{
...

  await ioTHubModuleClient.SetMethodHandlerAsync("UploadModuleLogs",UploadModuleLogs,ioTHubModuleClient);
}

private static async Task<MethodResponse> UploadModuleLogs(MethodRequest methodRequest,object userContext)
{
  ModuleClient ioTHubModuleClient = (ModuleClient)userContext;

  // Upload logs
  Console.WriteLine("Invoking method On edgeAgent");

  var payload = @"{
""schemaVersion"": ""1.0"",""sasUrl"": ""https://..."",""items"": [
    {
        ""id"": "".*"",""filter"": {
            ""tail"": 100
        }
    }
],""encoding"": ""none"",""contentType"": ""text""
} ";

  MethodRequest request = new MethodRequest("UploadModuleLogs",Encoding.UTF8.GetBytes(payload));

  string myModuleId = Environment.GetEnvironmentVariable("IOTEDGE_MODULEID");
  string myDeviceId = Environment.GetEnvironmentVariable("IOTEDGE_DEVICEID");

  Console.WriteLine($"{myDeviceId} {myModuleId} - UploadModuleLogs method request at {DateTime.Now}");
  //Console.WriteLine($"{request.DataAsJson}");

  try
  {
    var response = await ioTHubModuleClient.InvokeMethodAsync(myDeviceId,"$edgeAgent",request).ConfigureAwait(false);
    Console.WriteLine($"Received response with status: {response.Status} with message: {response.ResultAsJson}");

    return response;
  }
  catch (Exception ex)
  {
    Console.WriteLine($"Error invoking method {ex}");
  }

  return null;

尝试运行此命令

错误调用方法Microsoft.Azure.Devices.Client.Exceptions.DeviceNotFoundException:设备{“ message”:“找不到客户端myDeviceName / $ edgeAgent”}未注册 在Microsoft.Azure.Devices.Client.Transport.HttpClientHelper.ExecuteAsync(HttpMethod httpMethod,Uri requestUri,Func 3 modifyRequestMessageAsync,Func 2成功,Func 3 processResponseMessageAsync,IDictionary 2 errorMappingOverrides,CancellationToken cancelledToken)处 在Microsoft.Azure.Devices.Client.Transport.HttpClientHelper.PostAsync [T1,T2](Uri requestUri,T1实体,IDictionary 2 errorMappingOverrides,IDictionary 2 customHeaders,CancellationToken cancelleToken) 在Microsoft.Azure.Devices.Client.ModuleClient.InvokeMethodAsync(Uri uri,MethodRequest methodRequest,CancellationToken cancelleToken)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)