es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Signal R – La función OnDisconnectedAsync(Exception? exception) no está funcionando.

Estoy trabajando en una aplicación de chat en la web utilizando Blazor Web Assembly.

Estoy intentando enviar los estados (En línea / Fuera de línea) de los usuarios entre ellos.

Aquí está el SignalRHub.

En Connected está funcionando bien.

public override Task OnConnectedAsync()

Mi problema es que OnDisconnectedAsync() no se ejecuta en absoluto cuando depuro.

Incluso después de cerrar el cliente (navegador) al que el servidor está conectado.

public override Task OnDisconnectedAsync(Exception? exception)
{
var userId = _userManager.GetUserId(Context.User);

return base.OnDisconnectedAsync(exception);

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para que OnDisconnectedAsync no sea alcanzado en SignalR Hub

    Como experto en IT especializado en asp.net, SignalR, Blazor, Blazor-WebAssembly y SignalR Hub, te sugiero que revises las siguientes soluciones para resolver el problema de que OnDisconnectedAsync no sea alcanzado en SignalR Hub:

    1. Verificar si el estado de la conexión se está rastreando correctamente: Asegúrate de que el estado de conexión de los clientes se esté rastreando correctamente. Puedes agregar declaraciones de registro en los métodos OnConnectedAsync y OnDisconnectedAsync para verificar si son alcanzados o no.
    2. Intentar establecer un valor de tiempo de espera de desconexión más largo: Por defecto, SignalR utiliza un valor de tiempo de espera de desconexión de 30 segundos. Puedes intentar establecer un valor más largo para asegurarte de que el servidor espere un tiempo suficiente antes de considerar al cliente como desconectado.

      services.AddSignalR(options =>
      {
        options.ClientTimeoutInterval = TimeSpan.FromSeconds(60);
        options.HandshakeTimeout = TimeSpan.FromSeconds(10);
      });
      

    3. Verificar si hay algún otro problema con la configuración de SignalR Hub: Asegúrate de que la configuración de SignalR Hub sea correcta. Verifica si has agregado el middleware y los servicios correctos en el archivo de inicio.
    4. Desactivar el tiempo de espera inactivo de IIS Express: En algunos casos, IIS Express puede causar problemas con las conexiones de SignalR Hub. Puedes intentar desactivar el tiempo de espera inactivo en el archivo applicationhost.config.

      <system.applicationhost>
        <sites>
           <site name="NombreDelSitio" id="1">
              <application path="/" applicationpool="Clr4IntegratedAppPool">
                 <virtualdirectory path="/" physicalpath="%IIS_SITES_HOME%\NombreDelSitio"></virtualdirectory>
              </application>
              <bindings>
                 <binding protocol="http" bindinginformation="*:54808:localhost"></binding>
                 <binding protocol="https" bindinginformation="*:44308:localhost"></binding>
              </bindings>
           </site>
        </sites>
        <applicationpools>
           <add name="Clr4IntegratedAppPool" managedruntimeversion="v4.0"></add>
        </applicationpools>
        <applicationdefaults applicationpool="Clr4IntegratedAppPool"></applicationdefaults>
        <configsections>
           <sectiongroup name="system.webServer">
              <sectiongroup name="asp">
                 <section name="limits"></section>
              </sectiongroup>
              ...
           </sectiongroup>
           ...
        </configsections>
        <system.webserver>
           <asp>
              <limits maxrequestqueuelength="1000"></limits>
           </asp>
           ...
        </system.webserver>
        ...
        <sitedefaults>
           <tracefailedrequestslogging enabled="true" directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" maxlogfiles="20"></tracefailedrequestslogging>
           <ftpserver enabled="false"></ftpserver>
           <httpprotocol>
              <customheaders>
                 <clear></clear>
                 <add name="X-UA-Compatible" value="IE=edge"></add>
                 <add name="X-Content-Type-Options" value="nosniff"></add>
                 <add name="X-Frame-Options" value="SAMEORIGIN"></add>
                 <add name="X-XSS-Protection" value="1; mode=block"></add>
              </customheaders>
           </httpprotocol>
        </sitedefaults>
      </system.applicationhost>
      

    Espero que estas soluciones te ayuden a resolver el problema de que OnDisconnectedAsync no sea alcanzado en tu SignalR Hub. ¡Buena suerte!

Comments are closed.