我在编写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/

10-09 02:26