Azure WebJob 抛出 HttpRequestException
Azure WebJob Throwing HttpRequestException
我在 Azure 上托管一个应用程序作为一个连续的 WebJob。该程序经常(大约每秒一次)通过创建 DocumentClient 实例调用 CosmosDB 数据库(我使用 DocumentClient 函数 CreateDocumentQuery 和对结果 IEnumerable 的 Linq 查询从我的数据库中检索对象)。当我 运行 本地程序时,它的行为符合预期,没有任何问题。当我将程序发布为 Azure WebJob 并 运行 时,我的日志表明正在抛出 HttpRequestException 消息:
An error occurred while sending the request.
此外,我得到以下堆栈跟踪:
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification)
at System.Threading.Tasks.Task1.get_Result()
at Microsoft.Azure.Documents.Linq.DocumentQuery1.d__31.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at ... my calling code...
这个问题似乎只在我经常使用 DocumentClient 并且只在 WebJob 方面出现。 运行 等效的本地负载不会影响我的应用程序。为什么我的 WebJob 中会出现此异常?可能值得注意的是,S1 和 P1V2 应用服务层都会出现此问题。
DocumentClient 不应在每个请求的基础上使用,而应将其用作应用程序中的单例实例。根据请求创建客户端会增加大量延迟开销。
所以我将 Client 属性 声明为 "static" 并在 Service 的构造函数中对其进行初始化。您可以在 Connect 方法中调用 await Client.OpenAsync(
) 来 "warm" 客户端,并且在每个 public 方法中直接使用客户端实例来调用 DocumentDB API。
在Service的Dispose方法中处理Client。
这些客户端设计为可重复使用,因此建议您拥有一个可在所有函数中重复使用的静态实例。
您可以在这里找到有关性能问题的提示:
https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips#sdk-usage
希望对您有所帮助!
我在 Azure 上托管一个应用程序作为一个连续的 WebJob。该程序经常(大约每秒一次)通过创建 DocumentClient 实例调用 CosmosDB 数据库(我使用 DocumentClient 函数 CreateDocumentQuery 和对结果 IEnumerable 的 Linq 查询从我的数据库中检索对象)。当我 运行 本地程序时,它的行为符合预期,没有任何问题。当我将程序发布为 Azure WebJob 并 运行 时,我的日志表明正在抛出 HttpRequestException 消息:
An error occurred while sending the request.
此外,我得到以下堆栈跟踪:
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result() at Microsoft.Azure.Documents.Linq.DocumentQuery1.d__31.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source) at ... my calling code...
这个问题似乎只在我经常使用 DocumentClient 并且只在 WebJob 方面出现。 运行 等效的本地负载不会影响我的应用程序。为什么我的 WebJob 中会出现此异常?可能值得注意的是,S1 和 P1V2 应用服务层都会出现此问题。
DocumentClient 不应在每个请求的基础上使用,而应将其用作应用程序中的单例实例。根据请求创建客户端会增加大量延迟开销。
所以我将 Client 属性 声明为 "static" 并在 Service 的构造函数中对其进行初始化。您可以在 Connect 方法中调用 await Client.OpenAsync(
) 来 "warm" 客户端,并且在每个 public 方法中直接使用客户端实例来调用 DocumentDB API。
在Service的Dispose方法中处理Client。
这些客户端设计为可重复使用,因此建议您拥有一个可在所有函数中重复使用的静态实例。 您可以在这里找到有关性能问题的提示:
https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips#sdk-usage
希望对您有所帮助!