Streamlit on Windows IIS hangs without starting app (or starting all of Streamlit?)

I’m running an app deployed to a corporate intranet using Streamlit v1.29.0 and Python 3.8. It works fine from the CLI, but when I try to serve the app via IIS, it hangs with the gray boxes looping/pulsing indefinitely. There’s never anything in the upper right hand corner where you might expect to see “Connecting,” “Stop,” or the kebab menu. Looking in the IIS http logs, I see a lot of this (for example):

2023-12-25 08:52:23 ::1 GET /_stcore/stream - 8080 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/120.0.0.0+Safari/537.36+Edg/120.0.0.0 - 101 0 0 16
2023-12-25 08:52:23 ::1 GET /_stcore/health - 8080 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/120.0.0.0+Safari/537.36+Edg/120.0.0.0 http://localhost:8080/ 304 0 0 5
2023-12-25 08:52:23 ::1 GET /_stcore/host-config - 8080 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/120.0.0.0+Safari/537.36+Edg/120.0.0.0 http://localhost:8080/ 304 0 0 8
2023-12-25 08:52:27 ::1 GET /_stcore/stream - 8080 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/120.0.0.0+Safari/537.36+Edg/120.0.0.0 - 101 0 0 12
2023-12-25 08:52:27 ::1 GET /_stcore/health - 8080 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/120.0.0.0+Safari/537.36+Edg/120.0.0.0 http://localhost:8080/ 304 0 0 6
2023-12-25 08:52:27 ::1 GET /_stcore/host-config - 8080 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/120.0.0.0+Safari/537.36+Edg/120.0.0.0 http://localhost:8080/ 304 0 0 16
2023-12-25 08:52:32 ::1 GET /_stcore/stream - 8080 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/120.0.0.0+Safari/537.36+Edg/120.0.0.0 - 101 0 0 65
2023-12-25 08:52:32 ::1 GET /_stcore/host-config - 8080 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/120.0.0.0+Safari/537.36+Edg/120.0.0.0 http://localhost:8080/ 304 0 0 10
2023-12-25 08:52:32 ::1 GET /_stcore/health - 8080 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/120.0.0.0+Safari/537.36+Edg/120.0.0.0 http://localhost:8080/ 304 0 0 14

I feel like something is stuck in a loop, unless this is normal behavior.

I’m using IIS 10 with the HttpPlatformHandler module, passing the --server.port=%HTTP_PLATFORM_PORT% and --browser.serverPort=8080 parameters to Streamlit (with port 8080 bindings on IIS).

Any insight? I thought this might be a websocket thing, but I don’t have anything concrete to prove it.