簡體   English   中英

Azure 函數:值不能為空。 參數名稱:來源

[英]Azure function: Value cannot be null. Parameter name: source

最近,當我調用我的 Azure 函數時,每當我嘗試向 AddGroup 函數發出 HTTP 請求時,都會看到此異常。

  • 在我更新了一些 NuGet 包(特別是 Newtonsoft JSON 11.0.2)之前,它一直有效
  • 當我在本地運行該函數時它工作正常 - 這與 Azure 有關
  • 我已經推送了新代碼並多次重新啟動了該功能
  • 這里的其他問題說這可能是連接字符串問題,但是,它再次在我的本地機器上工作,我沒有觸及連接字符串
  • 當我嘗試附加雲調試器時,異常會在我的代碼中遇到任何斷點之前出現。

有任何想法嗎?

Time 11:04:02 AM
Exception type Microsoft.Azure.WebJobs.Host.FunctionInvocationException
Exception message Exception while executing function: AddGroup <--- Value cannot be null. Parameter name: source
Host.Results
Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: AddGroup ---> System.ArgumentNullException: Value cannot be null.

Parameter name: source

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.FunctionInvocationFilterInvoker.<InvokeAsync>d__9.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.<InvokeAsync>d__24.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.<ExecuteWithWatchersAsync>d__23.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.<ExecuteWithLoggingAsync>d__22.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.<ExecuteWithLoggingAsync>d__16.MoveNext()

   --- End of inner exception stack trace ---

   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.<ExecuteWithLoggingAsync>d__16.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.<TryExecuteAsync>d__13.MoveNext()

我想通了 - 我有一個 NuGet 包沖突。 我的一個項目試圖引用版本 Newtonsoft Json 9.0.1(Azure Functions SDK 所依賴的版本)以及另一個項目想要的 11.0.2。 我最終讓另一個項目也使用了 9.0.1 版本的包。

我遇到了同樣的問題,對我來說,錯誤的文本實際上有點相關。 我們從 Azure 得到的錯誤的奇怪部分是函數應用部署在一個訂閱上運行良好,但在另一個訂閱下給了我們這個“值不能為空”錯誤。 我無法談論訂閱之間的差異,但我可以解釋我們是如何解決問題的。

我們有一個 Azure Function App 執行的async Task方法。 在這個方法中,我們調用了一個 awaitable 方法,它返回一個IEnumerable<Thing>類型的Task ,其中Thing是一個簡單的數據模型類。 被調用的代碼如下所示:

var things = await SomeFactory.LoadXmlRequest<Thing>(xml, auth);

緊接着,我們需要檢查things包含任何數據,因此我們進行了如下檢查:

if (things.Any()) { ... }

我團隊中一位勇敢的開發人員建議我們先檢查things為空,然后再檢查它是否包含任何數據。 我們將調用修改為如下所示:

if (things != null && things.Any()) { ... }

這行得通。 我們所要做的就是在調用.Any() LINQ 擴展方法之前檢查該對象是否為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM