C# 使用HttpClient提供';脚本编译失败';在Azure函数中

C# 使用HttpClient提供';脚本编译失败';在Azure函数中,c#,azure,azure-functions,C#,Azure,Azure Functions,我在编写Azure函数时遇到了一个奇怪的问题。我使用HttpClient从Web服务获取数据,但当我运行该函数时,得到一个“脚本编译失败”。 为了解决这个问题,我编写了一个新的Azure函数,在其中我只检索HTML响应: using System; using System.Net.Http; using System.Threading.Tasks; public static void Run(TimerInfo myTimer, TraceWriter log) { log.In

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

Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常 执行函数时:Functions.testfunctionsync--> Microsoft.CodeAnalysis.Scripting.CompilationErrorException:脚本 编译失败。异步 Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.CreateFunctionTarget(CancellationToken 取消令牌)在 C:\azure webjobs sdk脚本\src\webjobs.script\Description\DotNet\DotNetFunctionInvoker.cs:343异步 Microsoft.Azure.WebJobs.Script.Description.FunctionLoader`1.GetFunctionTargetAsync[T](Int32) 尝试计数)在 C:\azure webjobs sdk脚本\src\webjobs.script\Description\FunctionLoader.cs :异步时为0 Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.GetFunctionTargetAsync() 在 C:\azure webjobs sdk脚本\src\webjobs.script\Description\DotNet\DotNetFunctionInvoker.cs:192异步 Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.InvokeCore(对象[]) 参数,FunctionInvocationContext)位于 C:\azure webjobs sdk脚本\src\webjobs.script\Description\DotNet\DotNetFunctionInvoker.cs:260异步 Microsoft.Azure.WebJobs.Script.Description.FunctionInvokerBase.Invoke(对象[]) 参数)在 C:\azure webjobs sdk脚本\src\webjobs.script\Description\FunctionInvokerBase.cs :171异步时 Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`1.InvokeAsync[TReflected](对象[]) 参数)异步 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker 调用程序,ParameterHelper ParameterHelper,CancellationTokenSource timeoutTokenSource,CancellationTokenSource functionCancellationTokenSource,布尔throwOnTimeout,TimeSpan 异步时的timerInterval、IFunctionInstance和instance) Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstance 实例,ParameterHelper ParameterHelper,TraceWriter traceWriter、ILogger记录器、CancellationTokenSou


示例中有两个编译错误:在
等待之后缺少
()
,并且没有将
日志作为参数传递给
调用HttpClient

您根本不应该使用
Wait()
,而是使
Run
async

以下是一个正确的版本:

公共静态异步任务运行(TimerInfo myTimer、TraceWriter日志)
{
log.Info($“C#计时器触发器函数在:{DateTime.Now}执行”);
等待调用HttpClient(日志);
}
公共静态异步任务CallHttpClient(TraceWriter日志)
{
使用(var httpClient=new httpClient())
{
var str=await httpClient.GetStringAsync(“https://www.google.com");
日志信息(str);
}
}

尝试使用System.Net添加
使用System.Net;
没有任何区别。尝试通过添加参数调用
Wait
Wait()
也许你可以从这个例子中挽救一些东西:如果
Run
像@4c74356b41链接的例子那样支持异步,那么你肯定应该
Wait
而不是
Wait()
以避免异步阻塞。谢谢,没有传递
log
是个问题。函数现在可以编译了。我知道这应该是显而易见的。。。