【发布时间】:2020-01-08 07:42:03
【问题描述】:
在我的 Windows 10 机器上使用 SignalR 和 IIS 时遇到问题。问题是IIS only allows for 10 concurrent connections。当第 10 个连接到达时,客户端 HubConnection 会长时间处于 Connecting 状态。
using Microsoft.AspNet.SignalR.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static int usedConnections = 0;
static void Main(string[] args)
{
Foo();
while (true) { }
}
static async void Foo()
{
for(int i = 0; i < 15; i++)
{
await SetupSignalR();
}
}
static async Task SetupSignalR()
{
//Set connection
var hub = new HubConnection("http://MyComputer/MyIISApp");
hub.TraceLevel = TraceLevels.All;
hub.TraceWriter = Console.Out;
//Make proxy to hub based on hub name on server
var myHub = hub.CreateHubProxy("MyIISHub");
//Start connection
hub.TransportConnectTimeout = TimeSpan.FromSeconds(5);
await hub.Start();
usedConnections++;
Console.WriteLine($"Used Conenctions: {usedConnections}");
return;
}
}
}
经过一段合理的时间后,我想向用户显示 HubConnection 无法连接到服务器的消息,但我不知道如何设置超时或触发事件。如何通知用户 IIS 不接受连接请求?
【问题讨论】:
-
async/await 只是使用 Task 对象的一种方式,但您可以使用 Task Parallel Library API 中的其他方式,例如 Task.Wait,docs.microsoft.com/en-us/dotnet/api/…