来自 SignalR 的响应被中断?

Response from SignalR being interrupted?

我正在尝试为我的 Xamarin 应用设置 SignalR。好吧,它适用于小的纯字符串,所以总的来说,我认为我的设置还可以。但出于某种原因,这不适用于“更大”(400 个字符)序列化对象(使用 Newtonsoft JSON)。

这很奇怪:当我调试它时,我可以进入粗体(eww,两颗星)线......然后就......什么都没有发生 - 没有异常,没有日志。我只是无法进入斜体(...一颗星)行(并且日志中也没有创建其他行)。而且应用程序没有崩溃或其他任何问题。

好吧,我想这与时间有关,但在花了 4-5 个小时后,我不知道接下来要尝试什么。

    private HubConnection HubConnection { get; set; }
    
    /// setting up connection and subscribe
    public async Task Initialize()
    {
        Log.Debug("Create connection to hub");
        HubConnection = new HubConnectionBuilder()
            .WithAutomaticReconnect()
            .WithUrl($"{ServiceLocator.Defaults.BackendUrl}MainHub")
            .Build();

        HubConnection.On<string>("ResponseFromHub", DefaultHandler);

        await HubConnection.StartAsync();
    }

    /// should handle incoming data
    private async Task DefaultHandler(string requestContextString)
    {
        Log.Debug($"Response {requestContextString}");
        // everything seems to work until the next line
        **var requestContext = SerializationHelper.DeserializeObject<RequestContext>(requestContextString);**
        *Log.Debug($"Response as object {requestContext}");*    
        await Task.FromResult(true);
    }
    
    /// send a request
    public async Task Request(RequestContext rc)
    {
        if (HubConnection == null)
            await Initialize();


        var requestContextString = SerializationHelper.SerializeObject(rc);
        Log.Debug($"Request: {rc}");
        await HubConnection.InvokeAsync(
            "RequestFromHub", 
            requestContextString
        );
    }

SerializationHelper 只是默认 Newtonsoft 函数的包装器,它只是设置选项(我使用了数千次):

    public static T DeserializeObject<T>(string contentString, JsonSerializerSettings jsonSerializerSettings = null)
    {
        if (jsonSerializerSettings == null)
        {
            jsonSerializerSettings = new JsonSerializerSettings();
            jsonSerializerSettings.TypeNameHandling = TypeNameHandling.All;
            jsonSerializerSettings.TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple;
            jsonSerializerSettings.Converters = new List<JsonConverter> { new ObjectDeserializer(), new IntDeserializer(), new FloatDeserializer() };
        }
        return JsonConvert.DeserializeObject<T>(contentString, jsonSerializerSettings);
    }

更新 似乎它与序列化程序有关。我能够使用 TypeNameHandling 的其他设置使其工作(当然不使用 TypeNameHandling.All)。但这并不能解决问题,因为我需要对象反序列化的类型信息。 我猜这是一些与线程相关的问题,线程被锁定了??

好的,我在调试器中更改默认异常处理后发现了问题: https://docs.microsoft.com/de-de/azure/azure-signalr/signalr-howto-troubleshoot-guide

确实有异常,只是被消音了!

Could not load file or assembly 'System.Private.CoreLib

所以接下来的步骤就是找到解决方法。我正在使用 .NET Standard 和 .NET 5(“核心”)库。但那是另一个话题并且被讨论,例如这里: