【发布时间】:2020-07-08 05:15:18
【问题描述】:
我们使用 Azure 函数通过 Azure NotificationHubClient 发送推送通知。这个函数在实时环境的高峰时间被调用很多,结果我们得到了很多从 NotificationHubClient.SendNotificationAsync() 方法抛出的 SocketExceptions。
异常详情:
Microsoft.Azure.NotificationHubs.Messaging.MessagingException: Unexpected exception encountered TimeStamp:2020-03-27T04:14:35.4655705Z ---> System.Net.Http.HttpRequestException: Cannot assign requested address ---> System.Net.Sockets.SocketException: Cannot assign requested address
at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask`1.get_Result()
at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask`1.get_Result()
at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
at System.Threading.Tasks.ValueTask`1.get_Result()
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Microsoft.Azure.NotificationHubs.NotificationHubClient.SendRequestAsync(HttpRequestMessage request, String trackingId, HttpStatusCode[] successfulResponseStatuses, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at Microsoft.Azure.NotificationHubs.ExceptionsUtility.HandleUnexpectedException(Exception ex, String trackingId)
at Microsoft.Azure.NotificationHubs.ExceptionsUtility.TranslateToMessagingException(Exception ex, Int32 timeoutInMilliseconds, String trackingId)
at Microsoft.Azure.NotificationHubs.NotificationHubClient.SendRequestAsync(HttpRequestMessage request, String trackingId, HttpStatusCode[] successfulResponseStatuses, CancellationToken cancellationToken)
at Microsoft.Azure.NotificationHubs.NotificationHubClient.SendNotificationImplAsync(Notification notification, String tagExpression, String deviceHandle, CancellationToken cancellationToken)
我们像这样创建 NotificationHubClient:
new NotificationHubClient(connectionString, hubName, new NotificationHubClientSettings
{
OperationTimeout = TimeSpan.FromSeconds(10)
});
我观察到背后的 Microsoft 实现是在每个新的 NotificationHubClient 实例化上实例化一个新的 HttpClient - 这可能是问题(众所周知的套接字耗尽),但我不知道如何解决这个问题。
有没有人遇到过同样的问题并设法以某种方式解决它?谢谢
【问题讨论】:
-
你好,@vtrenea。您介意通过 Azure 门户开具支持票吗?工程团队希望进一步调查您的情况。
-
我们遇到了非常相似的问题,但是我们的例外情况完全不同。 “无法连接到远程服务器。TrackingId:92cf019d-f3fc-4721-ac99-4e375f65f68b,TimeStamp:2020-04-08T06:56:24.9336294Z”但它与发送的大量推送有关,当我们重新启动应用程序,它会立即重新开始工作。
标签: azure azure-functions azure-notificationhub azure-hub