【发布时间】:2014-08-26 09:59:43
【问题描述】:
我们有一个基于 MongoDB 的跟踪系统和一个 Web 跟踪查看器(ASP.NET 4.0、c#、MVC 4)。此跟踪查看器的选项之一是跟随尾部。我已经通过 javascript 轮询实现了它,但我认为我可以用它来学习 SignalR。
我制作了一个本地副本,将其更新到 .NET 4.5 并通过 nuget(VS 2013)安装了 SignalR。我一直在关注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 有问题,但我不知道如何测试或修复它。任何帮助将不胜感激。
【问题讨论】:
-
哦!不,没有抛出异常
-
你从
GetTracesTail()返回什么特别的IEnumerable? -
GetTracesTail 构建一个 List
-
当您尝试
connectedClients.All.updateTail(tail.ToArray());时会发生什么?在我的办公室,我们在本地运行时通过 IIS Express 中的 SignalR 返回List<T>没有问题,但是我们所做的时间通常是在响应(而不是广播)中,当我们在广播中返回它们时,它们通常是响应的属性对象而不是结果本身。
标签: c# asp.net asp.net-mvc-4 signalr