Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 从Web应用程序与Cosmos DB交谈时经常出现HttpRequestException_Web Services_Azure_Asp.net Web Api_Azure Web App Service_Azure Cosmosdb - Fatal编程技术网

Web services 从Web应用程序与Cosmos DB交谈时经常出现HttpRequestException

Web services 从Web应用程序与Cosmos DB交谈时经常出现HttpRequestException,web-services,azure,asp.net-web-api,azure-web-app-service,azure-cosmosdb,Web Services,Azure,Asp.net Web Api,Azure Web App Service,Azure Cosmosdb,我们在Azure上部署了一个web服务(Azure应用程序服务),它通过标准C#SDK for Cosmos DB/文档数据库与我们的Azure Cosmos DB进行通信 app service和Cosmos DB帐户/集合都位于Azure中的同一资源组和同一位置 对于web服务向Cosmos DB执行突发请求的某些批量操作,我们在与数据库对话时经常会在web服务中遇到错误: System.AggregateException: One or more errors occurred. ---

我们在Azure上部署了一个web服务(Azure应用程序服务),它通过标准C#SDK for Cosmos DB/文档数据库与我们的Azure Cosmos DB进行通信

app service和Cosmos DB帐户/集合都位于Azure中的同一资源组和同一位置

对于web服务向Cosmos DB执行突发请求的某些批量操作,我们在与数据库对话时经常会在web服务中遇到错误:

System.AggregateException: One or more errors occurred. --->    System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.InternalBind(EndPoint localEP)
at System.Net.Sockets.Socket.BeginConnectEx(EndPoint remoteEP, Boolean flowContext, AsyncCallback callback, Object state)
at System.Net.Sockets.Socket.UnsafeBeginConnect(EndPoint remoteEP, AsyncCallback callback, Object state)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
 --- End of inner exception stack trace ---

[...]

at Microsoft.Azure.Documents.Query.ProxyDocumentQueryExecutionContext.<ExecuteNextAsync>d__0.MoveNext()<---
因此,据我所知,在整个web服务中,我们应该只为我们的2个存储库使用2个Document DB客户机

到目前为止我们已经尝试过的事情:

  • 在批量操作期间将客户端上的请求限制在3/s以下
  • 将客户端
    ConnectionPolicy.MaxConnectionLimit
    从默认值(50)减少到20
  • 增加应用程序
    ServicePointManager.DefaultConnectionLimit
这些措施都没有显著减少我们遇到的异常数量

有什么建议可以首先避免这个错误吗?

额外的Cosmos DB SDK功能,用于调整/配置/适应我们的用例。

Cosmos DB SDK确实具有重试策略,您可以将其配置为
连接策略的一部分。这些重试发生在serversize,但是如果您的调用不是异步的,它将锁定。我不知道这对你有多大的影响,但是已经为这件事建立了支持。
范围
操作为您处理所有重试逻辑,因此您不会出现这些错误。谢谢,我会尝试一下。您可能希望使用可靠的客户端,IReadWriteReliableClient@JoshuaKrstic已经在用了,谢谢。。
  IDocumentDbInitializer dbinit = new DocumentDbInitializer();
  Client = dbinit.GetClient(endpointUrl, myAuthKey, connectionPolicy);