我的Startup.SignalR.cs中有以下代码:
using Microsoft.AspNet.SignalR;
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Admin
{
public partial class Startup
{
public void ConfigureSignalR(IAppBuilder app)
{
var Config = new HubConfiguration()
{
EnableDetailedErrors = false,
Resolver = new DefaultDependencyResolver()
};
#if DEBUG
Config.EnableDetailedErrors = true;
#endif
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(600);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序的初始加载期间,一切都很顺利,但是当允许线程休眠(离开约10分钟)时,AppPool被回收并且线程卡在此行上:
app.MapSignalR();
Run Code Online (Sandbox Code Playgroud)
IDE被绿色箭头和This is the next statement to execute when this thread …
我一直在为客户开发一个项目,并且将SignalR集成到系统中有很多乐趣.
一切似乎都运行良好,客户对SIGR如何为其应用提供真实的实时反馈感到非常兴奋.
在大多数情况下,一切都在游动,但是我遇到了一个奇怪的问题,我根本无法确定.
一切都适用于以下语言环境:
但是,这些语言永远不会从集线器获得回调:
我可以直接执行代码,直到Clients.Client(ConnectionId).update(Result);
(其中ConnectionId是正确的连接ID,结果是准备序列化的对象,前四种语言完美无瑕,我得到了具有预期输出的Javascript方法.
然而,在最后四种语言中,该方法被触发,但没有任何东西通过另一方.没有.压缩.
如果我用默认的Strings.resx替换Strings.fr.resx文件,那么我的网站按预期运行,但由于Strings.en-ZW.resx文件与Strings.resx相同(只有每个字符串都包含在[()中) ])我怀疑这是问题所在.我也尝试使用fr语言环境删除所有unicode翻译(`,é,â等),但这没有帮助.
我已经花了差不多一整天了,发现没有任何迹象表明这个问题,而且en工作得很好,en-ZW并没有让我感到困惑.
有人有什么建议吗?
Hub方法:
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);
}
}
}
}
[...]
}
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
$.connection.clientHub.updateRow = function(value) { …
Run Code Online (Sandbox Code Playgroud)