I have a website which allows users to select from which devices they want to view data. The website generates a page which tells the user's browser where to ask for the device's data. The devices are old and no longer meet security standards for most browsers, so we are now directing the browser to connect to our .net web api application, which runs on the same server, which grabs the byte stream data and forwards it back to the browser.
Users can choose one device, but most scenarios have them viewing up to 20 devices. Multiple users can view the same device, as well.
The stream forwarding site is .net 4.6.1 web api hosted on Windows 2016 via IIS 10.
Stream forwarding works wonderfully for a few devices, but I seem to be hitting a limit of 6 devices. If I try to connect to a different set of devices with another browser, it also only loads 6 devices. But, that is a total of 12 devices. So, it looks like it is limited per requestor/browser/something. The network tab in the browsers show they have pending GET requests for all of the devices selected, so it looks like the browser are sending the requests. I setup a logger in the web api controller's GET() function and only the first 5 GET requests are getting to the controller. So, maybe its a .net or IIS setting which is limiting the number of connections coming through per _____?
I've read all the questions on here, as well as all the articles on other websites, related to the issue and haven't found anything that works. I've tried adding connectionManagement maxconnection in the machine.config and setting it to 100 for all IPs. I tried increasing the number of worker processes and maximum number of threads. I tried increasing the ServicePointManager.DefaultConnectionLimit, though I did that within my controller's GET function, and I'm not sure that's the correct place to do it.
Any ideas what might be causing the ~6 connection limit?
As stated in the comment above, the answer to my question was that I was hitting the maximum concurrent connections allowed by the browsers. The solution is to either get HTTP/2 working, so I can multiplex the streams, or setup my site using domain sharding. Obviously, using HTTP/2 is the desirable solution.
After setting up HTTP/2 for IIS, only IE is accepting the HTTP/2 connection and only between two servers in the same data center and only when addressed by server name. Trying to figure out whats going on.
Edit: The Full solution for this had a couple more pieces.
It turns out IIS doesn't like some browser's SSL Client Certs, so you have to set IIS' SSL Setting to Ignore client certs. This allowed me to connect with any HTTP/2 supported browser, but only between two servers in the same data center and only when addressed by server name. So, something along the network to grab the domain name for the site is blocking HTTP/2 traffic or preventing HTTP/2 upgrades.
The domain name problem occurred because our organization uses F5 Big-IP and apparently HTTP/2 profiles aren't setup by default. Our network team handled the profile, so I can't post the exact steps, but setting up a HTTP/2 profile for our site was the solution. I've been told there are step-by-step guides on the AskF5 site.