2017-08-01 77 views
2

我寫了一個Azure函數有一個奇怪的問題。我使用HttpClient從web服務獲取數據,但是當我運行該函數時,出現'腳本編譯失敗'。 隔離問題,我寫了一個新的Azure的功能,我只是取回HTML響應:使用HttpClient在Azure函數中給出'腳本編譯失敗'

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 : Exception while executing function: Functions.TestFunctionAsync ---> Microsoft.CodeAnalysis.Scripting.CompilationErrorException : Script compilation failed. at async Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.CreateFunctionTarget(CancellationToken cancellationToken) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 343 at async Microsoft.Azure.WebJobs.Script.Description.FunctionLoader`1.GetFunctionTargetAsync[T](Int32 attemptCount) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\FunctionLoader.cs : 0 at async Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.GetFunctionTargetAsync() at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 192 at async Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.InvokeCore(Object[] parameters,FunctionInvocationContext context) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 260 at async Microsoft.Azure.WebJobs.Script.Description.FunctionInvokerBase.Invoke(Object[] parameters) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\FunctionInvokerBase.cs : 171 at async Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`1.InvokeAsync[TReflected](Object[] arguments) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.InvokeAsync(IFunctionInvoker invoker,ParameterHelper parameterHelper,CancellationTokenSource timeoutTokenSource,CancellationTokenSource functionCancellationTokenSource,Boolean throwOnTimeout,TimeSpan timerInterval,IFunctionInstance instance) at async Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.ExecuteWithWatchersAsync(IFunctionInstance instance,ParameterHelper parameterHelper,TraceWriter traceWriter,ILogger logger,CancellationTokenSou…

+0

嘗試加入'使用System.Net;'' – 4c74356b41

+0

使用System.Net;'沒有任何區別。 –

+0

嘗試通過添加parens來調用'Wait':Wait()' – Crowcoder

回答

4

您的例如兩個編譯錯誤:缺少()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); 
    } 
} 
+0

謝謝,沒有通過'日誌'是問題所在。該函數現在編譯。我知道它應該是明顯的... –