簡體   English   中英

Azure WebJob 拋出 HttpRequestException

[英]Azure WebJob Throwing HttpRequestException

我在 Azure 上托管一個應用程序作為一個連續的 Web 作業。 該程序經常(大約每秒一次)通過創建 DocumentClient 實例來調用 CosmosDB 數據庫(我使用 DocumentClient 函數 CreateDocumentQuery 和結果 IEnumerable 上的 Linq 查詢來從我的數據庫中檢索對象)。 當我在本地運行程序時,它按預期運行,沒有任何問題。 當我將程序發布為 Azure WebJob 並運行它時,我的日志表明正在拋出 HttpRequestException 消息:

發送請求時發生錯誤。

此外,我得到以下堆棧跟蹤:

在 System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 在 System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) 在 System.Threading.Tasks.Task1.get_Result() 在 Microsoft.Azure.Documents.Linq.DocumentQuery1 .d__31.MoveNext() 在 System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source) 在...我的調用代碼...

這個問題似乎只發生在我頻繁使用 DocumentClient 並且只在 WebJob 方面。 在本地運行等效負載不會影響我的應用程序。 為什么在我的 WebJob 中會發生此異常? 可能值得注意的是,S1 和 P1V2 應用服務層都會出現此問題。

DocumentClient 不應在每個請求的基礎上使用,而應將其用作應用程序中的單例實例。 為每個請求創建客戶端會增加大量的延遲開銷。

因此,我將 Client 屬性聲明為“靜態”並在 Service 的構造函數中對其進行初始化。 您可以在 Connect 方法中調用await Client.OpenAsync( ) 來“預熱”客戶端,並在您的每個公共方法中直接使用 Client 實例來調用 DocumentDB API。

在 Service 的 Dispose 方法中處置 Client。

這些客戶端旨在重復使用,因此建議您擁有一個可在所有功能中重復使用的靜態實例。 在這里您可以找到有關性能問題的提示:

https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips#sdk-usage

希望有幫助!

暫無
暫無

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

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