Ошибка График таймера функций Azure
У меня есть функции таймера (бета-версия /v2), которая использует Graph Api и соединение MySql. Все работало, когда у меня был Http Trigger, но теперь, когда я решил использовать функцию таймера, я получаю сообщение об ошибке ниже.
Что мне не хватает? Пожалуйста, дайте мне знать. @ Джерри Лю, ты можешь знать ответ;)
Ошибка получена:
2018-08-10T13: 36: 17 Добро пожаловать, теперь вы подключены к службе потоковой передачи журналов. 2018-08-10T13:37:17 Никаких новых следов за последние 1 мин. 2018-08-10T13:37:23.958 [Информация] Сценарий для функции "TimerTriggerMeetingRoom" изменен. Перегрузочный. 2018-08-10T13:37:30.447 [Ошибка] run.csx(40,6): ошибка CS1997: поскольку "Run(TimerInfo, string, ILogger)" является асинхронным методом, который возвращает "Task", ключевое слово return не должно сопровождаться выражением объекта. Вы намеревались вернуть "Задачу"? 2018-08-10T13:37:30.548 [Информация] Компиляция не удалась.
This is my "run.csx" code:
#r "Newtonsoft.Json"
#r "System.Configuration"
#r "System.Data"
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System;
using System.Globalization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Configuration;
using System.Threading.Tasks;
public static async Task Run(TimerInfo myTimer, string graphToken, ILogger log)
{
var currentTime = DateTime.UtcNow;
var ramsey = new List<Ramsey>();
log.LogInformation("C# HTTP trigger function processed a request.");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", graphToken);
var json = await client.GetStringAsync("https://graph.microsoft.com/v1.0/me/");
log.LogInformation("C# HTTP trigger function processed a request.");
JObject jResults = JObject.Parse(json);
//log.LogInformation(jResults.ToString());
var result= jResults["value"];
log.LogInformation("value: "+result.ToString());
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(json, Encoding.UTF8, "application/json")
};
}
public class Ramsey
{
public string subject { get; set; }
}
"Function.json":
{
"bindings": [
{
"name": "myTimer",
"type": "timerTrigger",
"direction": "in",
"schedule": "0 */15 * * * *"
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "token",
"name": "graphToken",
"resource": "https://graph.microsoft.com",
"identity": "UserFromRequest",
"direction": "in"
}
]
}
Это вместо моего файла "functions.proj":
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Mobile.Client" Version="2.0.0"/>
<PackageReference Include="MySql.Data" Version="7.0.7-m61"/>
</ItemGroup>
</Project>
1 ответ
Похоже, это ваша проблема: [Error] run.csx(99,5): error CS1997: Since 'Run(TimerInfo, string, ILogger)' is an async method that returns 'Task', a return keyword must not be followed by an object expression. Did you intend to return 'Task'?
Обратите внимание, что в трассировке стека исключений есть "ошибка компиляции скрипта" и вышеприведенная ошибка, которая более конкретно вызывает ошибку в коде вашей функции.
Я бы изменил подпись вашего метода на public static async void Run(...)
и удалите возвращение нового HttpResponseMessage (предположительно в строке 99). Просто return;
было бы лучше для функции, запускаемой по таймеру, так как я не вижу вывода HTTP, имеющего смысл в этом контексте.