某些语言的SignalR客户端调用失败

本文关键字:客户端 调用 失败 SignalR 语言 | 更新日期: 2023-09-27 18:21:51

我一直在为一个客户做一个项目,并在将SignalR集成到系统中时玩得很开心。

一切似乎都运行得很好,客户对SignalR如何为他们的应用程序提供真正的实时反馈感到非常兴奋。

在大多数情况下,一切都很顺利,但我遇到了一个我根本无法确定的奇怪问题。

一切都适用于以下地区:

  1. en-US
  2. en-GB
  3. nl

然而,这些语言根本不会从集线器获得回调:

  1. fr
  2. de
  3. es
  4. en ZW-我们使用英语津巴布韦来检查所有字符串是否已翻译

我可以逐步完成代码,直到Clients.Client(ConnectionId).update(Result);(其中ConnectionId是正确的Connection ID,Result是准备序列化的对象,使用前四种语言,这一切都很完美,我得到了具有预期输出的Javascript方法。

然而,在最后四种语言中,该方法被激发,但没有任何东西通过。没有什么拉链

如果我将Strings.fr.resx文件替换为默认的Strings.resx,那么我的网站将按预期运行,但由于Strings.en-ZW.resx文件与Strings.resx相同(只有每个字符串都用[()]包装),我怀疑这是问题所在。我还尝试使用fr语言环境,删除了所有unicode翻译(`,é,â等),但无济于事。

我已经研究了将近一整天了,没有发现任何迹象表明这个问题,而且en工作得很好,en ZW并没有真正让我困惑。

有人有什么建议吗?

集线器方法:

public class ClientHub : Hub
{
    [...]
    protected void UpdateRecords(List<Int32> ChangedValues) 
    {
        using (var database = new DbContext())
        {
            foreach (Record R in database.Records.Where(Rc => ChangedValues.Contains(Rc.Id))
            {
                SignalRFormattedRecord Serialized = new SignalRFormattedRecord(Record);
                foreach (SavedFilter Filter in SavedFilters.ByRecord(Record))
                {
                    // Next line is always called.
                    Clients.Client(Filter.ConnectionId).updateRow(Serialized);
                }
            }
        }
    }
    [...]
}

Javascript:

$.connection.clientHub.updateRow = function(value) {
    debugger;
    // update code works in all languages except FR, DE, ES and en-ZW.
}
$.connection.start();

某些语言的SignalR客户端调用失败

事实证明,过滤系统并不是语言无关的,而且在调试过程中,由于挂起的连接,我得到了误报。

我现在觉得很愚蠢。