我有一个配置为使用 Web Garden 运行的 ASP.NET MVC 应用程序。会话状态模式在 web.config 中设置为 StateServer,使用如下:
<system.web>
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="360" />
</system.web>
ASP.NET 状态服务在同一台机器(不是远程机器)上运行,因此上面的 ip 在端口 42424 上设置为 127.0.0.1。它被配置为自动并且它始终在运行。
应用程序池的最大工作进程设置为 4。
我经常在事件日志中收到很多关于状态服务器的警告消息。在错误下方(事件 ID 1310):
Event code: 3009
Event message: No se pudo realizar la solicitud al servidor de estado de la sesión. Detalles: última fase='Leyendo respuesta del servidor de estado', código de error=0x8007000E, tamaño de datos salientes=0
Event time: 05/11/2020 16:22:45
Event time (UTC): 05/11/2020 15:22:45
Event ID: 2e332c8f5171461e9a635a55ead92129
Event sequence: 24813
Event occurrence: 40
Event detail code: 50016
Application information:
Application domain: /LM/W3SVC/2/ROOT-2-132490528848804756
Trust level: Full
Application Virtual Path: /
Application Path: C:\inetpub\wwwroot\MyMvcApp\
Machine name: MyServer
Process information:
Process ID: 4816
Process name: w3wp.exe
Account name: MyDomain\MyAppPoolIdentityAccount
Exception information:
Exception type: HttpException
Exception message: No se puede realizar una solicitud de estado de sesión al servidor de estado de sesión. Compruebe que el servicio de estado ASP.NET se ha iniciado y que los puertos de cliente y servidor son los mismos. Si el servidor se encuentra en un equipo remoto, compruebe el valor de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection para asegurarse de que acepta más solicitudes. Si el servidor se encuentra en el equipo local y si el mencionado valor del registro no existe o está establecido en 0, la cadena de conexión del servidor de estado debe utilizar 'localhost' o '127.0.0.1' como nombre de servidor.
TRANSLATED TO ENGLISH:
Unable to make the session state request to the session state server.
Please ensure that the ASP.NET State service is started and that the client and server ports are the same. If the server is on a remote machine, please ensure that it accepts remote requests by checking the value of HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection.
If the server is on the local machine, and if the before mentioned registry value does not exist or is set to 0, then the state server connection string must use either 'localhost' or '127.0.0.1' as the server name.
Request information:
Request URL: http://my.mvcapp.com/Wizard/MakeOrder
Request path: /Wizard/MakeOrder
User host address: 172.28.X.XX
User: MyDomain\OneUser
Is authenticated: True
Authentication Type: Negotiate
Thread account name: MyDomain\MyAppPoolIdentityAccount
Thread information:
Thread ID: 67
Thread account name: MyDomain\MyAppPoolIdentityAccount
Is impersonating: False
Stack trace:
Custom event details:
我已确保 ASP.NET State 服务已启动并正在运行,并且客户端和服务器端口是正确的,分别为 127.0.0.1 和 42424。我还有注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection。该键存在并且设置为 0,因为 ASP.NET State 服务在同一台机器上运行(无需将其设置为 1)。
所以,我不明白为什么要检查状态服务器.....有什么想法吗?我花了很多天谷歌搜索,但我无法解决这个问题。