我目前正在高频率地遇到这个问题:
System.Net.Sockets.SocketException:尝试访问a 套接字以其访问权限禁止的方式
有时在从我的网络应用程序(下面的代码)连接到Azure存储时会发生这种情况,但大部分时间都发生在SignalR上。
基于debug diag,我看到以下内容:
w3p.dmp中的394个客户端连接已执行超过90秒的请求。
根据内存转储,与/signalr/connect
和/signalr/reconnect
建立了大量关联。
看起来我正在使用AspNet.SignalR.WebSockets.WebSocketHandler从代码中进行SignalR连接。在这一点上,我不知道该寻找什么 - 可能是罪魁祸首?我们有一个生活在Azure中的Web服务,其中Web应用程序和移动应用程序连接到SignalR背板(redis)。
调试诊断屏幕
Azure存储代码
public void EnqueueRequest(int requestId)
{
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings.Get("AzureStorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference(ConfigurationManager.AppSettings.Get("requestQueueName"));
// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage(castingCallId.ToString(CultureInfo.InvariantCulture));
queue.AddMessage(message);
}
中心代理服务器代码
var baseUrl = _dbContext.CurrentTenant.BaseUrl;
_hubConnection = new HubConnection(baseUrl);
_hubProxy = _hubConnection.CreateHubProxy("appHub");
await _hubConnection.Start();
string serialized = null;
try
{
serialized = JsonSerializerExtensions.SerializeObject(data).SanitizeData();
await _hubProxy.Invoke((isTypingNotification ? "SendTypingNotification" : "SendClientNotification"), serialized, username);
}
catch (Exception exception)
{
LogError("1: " + exception);
}
答案 0 :(得分:1)
SB2055和我一起研究并做了以下修改以消除这个问题:
不要为要发送的每封邮件创建HubConnection。 HubConnection是一个重量级对象,应该创建一次并重用。如果需要,您可以多次重新创建IHubProxy。您可以通过将HubConnection设置为类静态成员变量来完成此操作。
我们将连接类型从Web套接字更改为长轮询。