C#C
C#3y ago
JakeWindle

SignalR client method calling C#/JS interop, hangs indefinitely.

Hey all, I have a project that I've been working on that involves heavy usage of SignalR and C#/JS interop.

The basic flow goes like this:
  1. On SignalR connect, send the client a message GetDimensions that the client acts on.
  2. When client receives GetDimensions, call C# service class that imports JS module
  3. C# service class calls JS function to grab screen dimensions, await result
  4. Return result as ValueTask<ScreenDimensions> from service class.
  5. Call the SignalR hub SetScreenDimensions method with the return from the service class.
My problem: This is working fine on Linux, but on Windows (using Edge and Chrome), the code I've noted with // THIS HANGS HERE won't run. I can see in teh JS console that I'm reaching that client method, but that call I'm awaiting hangs indefinitely.

Code samples:

Client Receive Method
    hubConnection.On("GetDimensions", async () =>
    {
        var dimensions = await _screenInfo.GetDimensions(); // THIS HANGS HERE, does JS stuff
        await hubConnection.SendAsync(
            "CalculateDisplayArea",
            dimensions.width,
            dimensions.height,
            0);
    });


ScreenInfo class method:
    public async ValueTask<ScreenDimensions> GetDimensions()
    {
        if (_screenDimensions is not null)
        {
            return _screenDimensions;
        }

        // Load the module if null.
        _module ??= await _js.InvokeAsync<IJSObjectReference>("import", _dbModulePath);

        _screenDimensions = await _module.InvokeAsync<ScreenDimensions>("getDimensions");
        return _screenDimensions;
    }


Anything glaringly wrong? I can't figure out why this call would work on Linux, but it would hang on Windows.

dotnet version: 7.0.402
Was this page helpful?