问题标签 [signalr-hub]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何使用 SignalR 集线器将消息从服务器发送到客户端
我刚刚开始探索 signalR,我希望能够将消息从服务器发送到所有客户端。
这是我的集线器
这是我的客户页面
这一切都很完美,我可以在 2 个不同的浏览器之间“聊天”。
我要做的下一件事是从服务器向所有客户端发起一条消息。
所以我尝试了这个。
这似乎不起作用。计时器工作,“aTimer_Elapsed”事件处理程序每 3 秒运行一次,但聊天中心上的“发送”方法从不运行。
有任何想法吗?
c# - 带有Windows 8的singalR
有没有人让 signalR 在 Windows 8 或 Server 2012 上运行?当我浏览到信号器 url 时,我收到以下错误:
signalr - SignalR 错误 404
我从使用 SignalR 集线器的 SignalR 文档中复制了一个 lil 示例。在开发环境(VS)下它工作正常,在我将它上传到我的主机后,我收到信号器/集线器的错误 404。我查看了 SignalR 常见问题解答,他们推荐以下内容 -
和,
不幸的是,他们都没有为我工作......
有什么建议么 ?
knockout.js - SignalR/CoffeeScript Hub 回调问题
这工作正常
而这
结果导致我的服务器端集线器接收服务器消息,但无法进行任何回调。
我在这里想念什么???这把我逼到了墙角。显然,基于原型的解决方案将起作用,因为它使所有内容都“静态”,但我很受挫,因为我目前无法编写分离良好的代码。
有没有办法查看集线器试图调用的内容?SignalR 文档讨论了跟踪/记录,但从未解释过如何。
javascript - SignalR:调用集线器方法时发生内部服务器错误
几天来我一直在玩 SignalR,我不得不说它绝对是一个了不起的库。我已经设法得到了一些使用它的东西,并且对它的简单性感到震惊,但我最近遇到了一个小问题。
我无法在浏览器中从 JavaScript 调用 Hub 方法。该请求返回一个 500 错误代码,当我查看错误页面源时,我看到:
我的服务器端代码是:
在客户端我有:
我已经挖掘了一段时间,但我就是找不到问题的根源......有人可以帮我吗?
signalr-hub - SignalR 和 Silverlight
我正在使用 SignalR.Hubs 连接到一个名为“MyHub”的集线器,我的集线器托管在 IIS 中,虚拟目录为“MyVD”:这就是我正在尝试连接到集线器的方式:
当我这样做时,我收到异常消息“远程服务器返回错误:未找到”。
在 System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在 SignalR.Client.Http.HttpHelper.<>c_ DisplayClass2.b _0(IAsyncResult ar) 在 System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func
2 endFunction,操作1 endAction, Task
1 承诺)。
请注意,当我直接在 Visual Studio 中运行它时,我可以与集线器协商(当然,我将 url 更改为指向本地开发服务器)任何帮助,将不胜感激。
谢谢, 阿尔皮
asp.net-mvc - Signalr 从集线器外部调用特定客户端
我知道Chris Fulstow 项目 log4net.signalr,如果您想要一个非生产日志,这是一个好主意,因为它记录了来自所有请求的所有消息。我希望有一些东西可以通过发起它们的请求来区分日志消息并返回到正确的浏览器。
这是我在附加程序中所做的:
我正在尝试将会话 ID 附加到 cookie,但这在同一台机器上不起作用,因为 cookie 已被覆盖。这是我在客户端上用来附加事件的代码:
结果,只有连接的最后一页显示了日志消息。我想知道是否有一些策略可以从发起当前请求的浏览器中获取当前连接 ID(如果有的话)。另外我很想知道是否有更好的设计来实现每个浏览器的日志记录。
编辑
我可以制作一个基于约定名称的 cookie(如 log-id-someguid ),但我想知道是否有更聪明的东西。
赏金 我决定就这个问题开始赏金,我还会询问架构,以查看我的策略是否有意义。我的疑问是,我在从服务器到客户端的单一“方向”上使用集线器,我用它来记录不是源自对集线器的调用,而是来自其他请求(可能是在其他集线器上提出的请求)的活动,是这是一个正确的方法,以浏览器可见的 log4net 附加程序为目标?
asp.net - 服务器端 SignalR 集线器 IConnected 和 IDisconnect 不起作用
我刚刚将SignalR中的示例代码翻译为 VB.NET,如下所示。当test
我从客户端调用它时,它会被正确调用,但服务器端Connect
,Disconnect
和Reconnect
永远不会被调用。还有什么我应该做的吗?我已经用 IE10、Chrome 和 FF 进行了测试。
已编辑:$.connection.hub.disconnected
并且stateChanged
正在按我的预期工作。
signalr - Signalr 跨域连接用户认证
我将我的信号器集线器托管在一个单独的域上,并从我的主应用程序跨域连接到集线器。当用户登录到主应用程序时,将建立信号器连接。现在,我遇到的问题是如何识别集线器内的连接用户。如果我的 HUb 在主应用程序中,那么我可以使用登录用户的 UserContext 并维护一个字典(来自 MessengR 应用程序的示例)并在 Connect 和 Disconnect 事件中更新它们。
但是作为跨域连接,我没有 UserContext 并且我无法知道该连接 ID 属于谁。我在这里迷路了。是否可以在 Connect() 事件上从客户端传递查询字符串?我有一个令牌来识别我可以用来跟踪的用户。或以其他方式将用户链接到连接 ID。如果有人能给我一些指导。谢谢!
signalr - SignalR 返回错误 - 反序列化对象时意外结束
我有一个简单的项目,我正在使用signalR,当页面加载时,signalR脚本被成功加载,但是在那之后,调用
http://localhost:24634/signalr/signalr/connect?transport=foreverFrame&connectionId=dca2db9c-b16a-4b96-96dc-9a6b187b6d9e&connectionData=[{"name":"notifier"}]&tid=5&frameId=1
返回 500 Internal Server Error,我在 fiddler 中检查了这个请求,错误消息说
反序列化对象时意外结束。
这是我的集线器定义
这是我的客户代码
任何想法可能导致此错误?
编辑 这里是堆栈跟踪信息
[JsonSerializationException:反序列化对象时意外结束。第 1 行,位置 2。]
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CheckedRead(JsonReader reader) +75
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue) +48
Newtonsoft .Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue) +86
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IWrappedCollection WrappedList, JsonReader reader, String reference, JsonArrayContract contract) +635
Newtonsoft.Json.Serialization.<>c_ DisplayClass1.<CreateAndPopulateList>b _0(IList l, Boolean isTemporaryListReference) +124
Newtonsoft.Json.Utilities.CollectionUtils.CreateAndPopulateList(Type listType, Action 1 groups, IRequest request) +140 SignalR.PersistentConnection .ProcessRequestAsync(HostContext 上下文)+227 SignalR.Hubs.HubDispatcher.ProcessRequestAsync(HostContext 上下文)+120 SignalR.Hosting.AspNet.AspNetHandler.ProcessRequestAsync(HttpContextBase 上下文)+463 SignalR.Hosting.AspNet.HttpTaskAsyncHandler.System.Web.IHttpAsyncHandler。 BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +682 populateList) +546
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateAndPopulateList(JsonReader reader, String reference, JsonArrayContract contract) +101
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String reference) +62
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue) +113
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueNonProperty(JsonReader reader, Type objectType, JsonContract contract, JsonConverter converter) +118
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType) +125
Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) +311
Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) +107
Newtonsoft.Json.JsonConvert.DeserializeObject(String value, JsonSerializerSettings settings) +66
SignalR.JsonNetSerializer.Parse(String json) +57
SignalR.Hubs.HubDispatcher.CreateConnection(String connectionId, IEnumerable
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
编辑2:
还有一点注意 - 从运行没有任何错误的页面中,请求的 url 看起来像这样
localhost:24634/signalr/signalr/connect?transport=foreverFrame&connectionId=98e6d5b3-b164-4013-92c2-418aa6254f9e&connectionData=%5B%7B%22name%22%3A%22notifier%22%7D%5D&tid=7&frameId=1
失败的请求 url 看起来像这样
localhost:24634/signalr/signalr/connect?transport=foreverFrame&connectionId=9b398750-99d6-4188-88b5-b41ad9eb82d5&connectionData=[{"name":"notifier"}]&tid=1&frameId=1
您可能注意到,urls 中定义 connectionData 查询字符串参数的方式不同,特别是对于第一个 url,connectionData 已经对查询字符串值进行了 url 编码,而第二个查询字符串参数已经进行了 html 编码。我查看了请求标头,失败的请求 Content-Type 是 text/html,第二个请求的 Content-Type:application/json。
编辑 3:
我在 jquery.signalR-0.5.3.js 文件中找到了解析 connectionData 的位置,这里是实际编码 connectionData 值的代码
如您所见,window.escape() 负责对 connectionData 进行编码,但是,如果我调试此代码,我可以看到 window.escape(connection.data) 确实是 html 编码 connection.data 而不是 url 编码。但这只发生在一个页面上,在另一个页面上,它按预期工作。