我们有一个基于MongoDB的跟踪系统和一个Web跟踪查看器(ASP.NET 4.0,c#,MVC 4)。跟踪查看器的一个选项是遵循尾部。我已经通过javascript轮询实现了它,但我想我可以用它来学习SignalR。
我制作了本地副本,将其更新为.NET 4.5并通过nuget安装了SignalR(VS 2013)。我一直在关注Tutorial: Server Broadcast with SignalR 2的指南和ASP.NET SignalR Hubs API Guide - Server (C#)的文档。本指南指出
您可以像在任何C#方法中一样指定返回类型和参数,包括复杂类型和数组。通过使用JSON在客户端和服务器之间传递您在参数中接收或返回给调用者的任何数据,并且SignalR自动处理复杂对象和对象数组的绑定
和
[当您从Hub类调用客户端方法时]您可以为参数指定复杂类型和数组。
TraceModel是一个简单的类,包含多个公共字符串(如类别,消息,服务器)和创建的DateTime。我的核心流程是:
IEnumerable<TraceModel> traces = GetTracesTail();
if (traces.Any())
{
BroadcastTracesTail(traces);
}
private void BroadcastTracesTail(IEnumerable<TraceModel> tail) {
connectedClients.All.updateTail(tail);
}
并且当它必须返回IEnumerable时它会失败(并强制IIS Express服务器关闭)(我已经尝试返回List但它仍然失败)。在以下情况下不会失败:
private void BroadcastTracesTail(IEnumerable<TraceModel> tail) {
connectedClients.All.updateTail(tail.Count());
}
所以我认为它必须是我的JSON解析器或我的IIS express的问题,但我不知道如何测试或修复它。任何帮助都会被贬低。
答案 0 :(得分:0)
嗯,这是json序列化程序和我的短视的问题:我没有意识到我的TraceModel有一个Bson.ObjectId字段(因为它来自MongoDB),这是不可序列化的。我把它改成了字符串,现在它很好地序列化了。 感谢 welegan 的评论。