我正在试用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
23 processResponseMessageAsync, IDictionary
成功,Microsoft.Azure.Devices.Client.Transport.HttpClientHelper.PostAsync [T1,T2]中的Func 2 errorMappingOverrides,CancellationToken cancelToken)(Uri requestUri,T1实体,2 errorMappingOverrides, IDictionary
Microsoft的IDictionary 2 customHeaders,CancellationToken cancelToken) .Azure.Devices.Client.ModuleClient.InvokeMethodAsync(Uri uri,MethodRequest methodRequest,CancellationToken cancelledToken)
这是预期的行为,其他模块无法调用边缘代理的直接方法。边缘代理在设计上不会连接到edgeHub,因为代理的直接方法具有特权,并且需要服务凭据才能访问。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句