我在编写Azure函数时遇到了一个奇怪的问题。我使用HttpClient从Web服务获取数据,但是当我运行该函数时,出现“脚本编译失败”的情况。
为了找出问题所在,我编写了一个新的Azure函数,其中仅检索HTML响应:
using System;
using System.Net.Http;
using System.Threading.Tasks;
public static void Run(TimerInfo myTimer, TraceWriter log)
{
log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
CallHttpClient().Wait;
}
public static async Task CallHttpClient()
{
using (var httpClient = new HttpClient())
{
var str = await httpClient.GetStringAsync("https://www.google.com");
log.Info(str);
}
}
我正在使用Azure门户。调用日志给了我这个错误:
执行函数时发生异常:Functions.TestFunctionAsync
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常
执行函数时:Functions.TestFunctionAsync --->
Microsoft.CodeAnalysis.Scripting.CompilationErrorException:脚本
编译失败。在异步
Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.CreateFunctionTarget(CancellationToken
cancelToken)
C:\ azure-webjobs-sdk-script \ src \ WebJobs.Script \ Description \ DotNet \ DotNetFunctionInvoker.cs:异步343
Microsoft.Azure.WebJobs.Script.Description.FunctionLoader`1.GetFunctionTargetAsync [T](Int32
tryCount)
C:\ azure-webjobs-sdk-script \ src \ WebJobs.Script \ Description \ FunctionLoader.cs
:异步时为0
Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.GetFunctionTargetAsync()
在
C:\ azure-webjobs-sdk-script \ src \ WebJobs.Script \ Description \ DotNet \ DotNetFunctionInvoker.cs:异步192
Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.InvokeCore(Object []
参数,FunctionInvocationContext上下文)
C:\ azure-webjobs-sdk-script \ src \ WebJobs.Script \ Description \ DotNet \ DotNetFunctionInvoker.cs:异步时为260
Microsoft.Azure.WebJobs.Script.Description.FunctionInvokerBase.Invoke(Object []
参数)
C:\ azure-webjobs-sdk-script \ src \ WebJobs.Script \ Description \ FunctionInvokerBase.cs
:异步171
Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`1.InvokeAsync [TReflected](Object []
参数)在异步
Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker
调用程序,ParameterHelper parameterHelper,CancellationTokenSource
timeoutTokenSource,CancellationTokenSource
functionCancellationTokenSource,布尔型throwOnTimeout,TimeSpan
timerInterval,IFunctionInstance实例)在异步时
Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstance
实例,ParameterHelper parameterHelper,TraceWriter
traceWriter,ILogger记录器,CancellationTokenSou…
最佳答案
您的示例中有两个编译错误:在()
之后缺少Wait
,并且没有将log
作为参数传递给CallHttpClient
。
您根本不应该使用Wait()
,而是要使Run
异步。
这是一个正确的版本:
public static async Task Run(TimerInfo myTimer, TraceWriter log)
{
log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
await CallHttpClient(log);
}
public static async Task CallHttpClient(TraceWriter log)
{
using (var httpClient = new HttpClient())
{
var str = await httpClient.GetStringAsync("https://www.google.com");
log.Info(str);
}
}
关于c# - 使用HttpClient在Azure Function中给出``脚本编译失败''的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45436486/