Произошла ошибка Отправка событий: Адаптер вывода функции Azure не смог записать события Функция Azure в качестве вывода задания Stream Analytics
У меня есть MXChip Azure IoT Dev Kit, и я отправляю данные датчика в концентратор IoT. Я также настроил задание Stream Analytics с вводом в качестве концентратора IoT и выводом в качестве SQL Server и функции Azure. Вывод записывается в базу данных SQL, поэтому я подтверждаю, что запрос правильный.
Когда я проверяю свой журнал заданий потоковой аналитики, я вижу некоторую ошибку, как показано ниже.
{
"channels": "Operation",
"correlationId": "4a9c9b61-631a-4f4f-a403-c2869b2af66c",
"description": "",
"eventDataId": "97250faf-fa47-4e78-9981-8429f293bab9",
"eventName": {
"value": "streamingNode0",
"localizedValue": "streamingNode0"
},
"category": {
"value": "Administrative",
"localizedValue": "Administrative"
},
"eventTimestamp": "2018-12-18T15:54:22.9777487Z",
"id": "",
"level": "Error",
"operationId": "a613bc6a-5f61-4064-bea5-83c3af232e68",
"operationName": {
"value": "Send Events: Azure Function Output Adapter failed to write events",
"localizedValue": "Send Events: Azure Function Output Adapter failed to write events"
},
"resourceGroupName": "mlIoTPlatformDev",
"resourceProviderName": {
"value": "Microsoft.StreamAnalytics",
"localizedValue": "Microsoft.StreamAnalytics"
},
"resourceType": {
"value": "Microsoft.StreamAnalytics/streamingjobs",
"localizedValue": "Microsoft.StreamAnalytics/streamingjobs"
},
"resourceId": "",
"status": {
"value": "Failed",
"localizedValue": "Failed"
},
"subStatus": {
"value": "",
"localizedValue": ""
},
"submissionTimestamp": "2018-12-18T15:55:04.0799116Z",
"subscriptionId": "",
"properties": {
"Message Time": "2018-12-18 15:54:22Z",
"Error": "- An error occurred while sending the request.\r\n- The underlying connection was closed: An unexpected error occurred on a send.\r\n- Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.\r\n- An existing connection was forcibly closed by the remote host\r\n",
"Message": "Failed to write events. Error encountered after writing [0] batches., - An error occurred while sending the request.\r\n- The underlying connection was closed: An unexpected error occurred on a send.\r\n- Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.\r\n- An existing connection was forcibly closed by the remote host\r\n, : OutputSourceAlias:AzureFunctionOutput;AdapterType:AzureFunction;ShardId:0;",
"Type": "AzureFunctionOutputAdapterFailure",
"Correlation ID": "4a9c9b61-631a-4f4f-a403-c2869b2af66c"
},
"relatedEvents": []
}
Ниже приведен мой код функции Azure.
[FunctionName("GetData")]
public static async Task < HttpResponseMessage > Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestMessage req,
// [SignalR(HubName = "ml-iot-platform")] IAsyncCollector<SignalRMessage> signalRMessages,
ILogger log) {
log.LogInformation($ "GetData function triggered with Uri {req.RequestUri}");
dynamic data = await req.Content.ReadAsAsync < object > ();
log.LogInformation($ "Data count is {data.Count}");
if (data.ToString().Length > 262144) {
return new HttpResponseMessage(HttpStatusCode.RequestEntityTooLarge);
}
//await signalRMessages.AddAsync(new SignalRMessage()
//{
// Target = "checkData",
// Arguments = new object[] { data }
//});
return req.CreateResponse(HttpStatusCode.OK, "Success");
}
Вы когда-нибудь сталкивались с этой проблемой?
1 ответ
Думаю, я понял, что изменил код функции Azure следующим образом.
[FunctionName("GetData")]
public static async Task < HttpResponseMessage > Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestMessage req,
ILogger log) {
log.LogInformation($ "GetData function triggered with Uri {req.RequestUri}");
string content = await req.Content.ReadAsStringAsync();
log.LogInformation($ "String content is {content}");
dynamic data = JsonConvert.DeserializeObject(content);
log.LogInformation($ "Data count is {data?.Count}");
if (data ? .ToString() ? .Length > 262144) {
return new HttpResponseMessage(HttpStatusCode.RequestEntityTooLarge);
}
return req.CreateResponse(HttpStatusCode.OK, "Success");
}
Когда я отслеживал свою функцию Azure, я мог видеть, что получаю ошибку, так как "MediaTypeFormatter недоступен для чтения объекта типа" Объект "из содержимого с типом носителя" application / octet-stream ".", Поэтому я получаю Данные в виде строки и десериализованы одинаково.
Кроме того, я также установил версию моей функции TLS на 1.0, это очень важно, Microsoft дает предупреждение об изменении, но не ошибку.
Теперь функция работает нормально, без ошибок, из опции монитора. Вы также можете увидеть документацию здесь.