我正在考虑更新现有网站以使用SignalR.我的站点轮询第三方服务以进行数据更改,对其进行一些魔术,并且客户端每隔几分钟轮询一次以使用任何更新刷新其视图.
SignalR似乎是消除客户端轮询的好方法,但我想知道SignalR如何处理丢弃和重新连接的连接,特别是关于可能已暂停一段时间的移动网络应用程序.它会自动协商并排队在此期间遗漏的任何更新,还是客户端需要在这些情况下从头开始重新同步?我看了,但找不到任何关于此的文档,所以指导将不胜感激.
我正在使用SignalR在非常特定的网络条件下(一个疯狂的代理).所以套接字根本不起作用,我必须使用长轮询.当我刷新页面时,它似乎工作了一段时间,但第一次Disconnect发生了.我正在尝试自动重新连接断开连接的事件和以下模式:
这种行为似乎很奇怪.我能做些什么来改善它吗?
假设我的网络连接丢失了几秒钟,我错过了一些SignalR服务器推送的消息.
当我重新获得网络连接时,我错过了丢失的消息?还是signalR处理它们并在重新连接时将它们推出?
如果它无法处理错过的消息,那么确保一致性的建议方法是什么?
我试图覆盖OnConnected(),OnDisconnected()方法,但我得到:OnConnected()':找不到合适的方法来覆盖
实现IDisconnect,IConnect接口以及在Connect()和Disconnect()中进行处理与OnConnected(),OnDisconnected()相同吗?
是什么赋予了?
OnConnected()': no suitable method found to override
Run Code Online (Sandbox Code Playgroud) 我有一个方法集线器,称为客户端.此方法启动一个带有委托的计时器,该委托每10秒运行一次.如果在没有人连接到集线器的情况下继续运行此委托是没有意义的,我想在重新计划之前检查是否有任何用户仍然从委托内部连接.有没有办法做到这一点?
我将SignalR合并到一个项目中,我已经使用require.js来处理我的脚本依赖项.
我在加载"jquery.signalR-1.1.2"后确保调用"/ signalr/hubs"时遇到了一些麻烦.
我得到了它的工作,但我想知道是否有更好的替代品.
这就是我所拥有的:
require(["signalr"], function () {
require(["noext!/signalr/hubs"], function () {
//initialize and work with the hub here
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在这里创建一个垫片来建立信号器/集线器和信号器脚本之间的依赖关系?
谢谢!
信号器不加载我的集线器:
SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/js'></script>.
Run Code Online (Sandbox Code Playgroud)
我打电话app.MapSignalR();在startup configuration.
我添加到我的cshtml:
<script src="~/Scripts/jquery-1.9.1.js"></script>
<script src="~/Scripts/jquery.signalR-2.0.0.js"></script>
<script src="~/signalr/hubs" type="text/javascript"></script>
<script>
$(document).ready(function () {
window.hubReady = $.connection.hub.start();
});
</script>
Run Code Online (Sandbox Code Playgroud) 使用SignalR(v2.0.2)我得到了这个例外:
Value cannot be null.
Parameter name: o
at Newtonsoft.Json.Utilities.ValidationUtils.ArgumentNotNull(Object value, String parameterName)
at Newtonsoft.Json.Linq.JToken.FromObjectInternal(Object o, JsonSerializer jsonSerializer)
at Newtonsoft.Json.Linq.JToken.FromObject(Object o, JsonSerializer jsonSerializer)
at Microsoft.AspNet.SignalR.Client.Hubs.HubProxy.Invoke[T](String method, Object[] args)
Run Code Online (Sandbox Code Playgroud)
我正在使用反射调用HubProxy,并且我传入了一些触发此错误的空参数(也就是说,其中的一些项Object[] args为null).但是,将参数传递给方法的null是完全合法的事情.这是SignalR中的一个错误,因为它试图序列化空参数,或者它是否是Json.NET(v6.0.1)中的一个错误,因为它不应该尝试序列化一个空对象?
我想构建一个Windows服务,通过自主ASP.NET Web API提供一些服务.另外,我想通过自主信号R告知客户一些变化.我认为ASP.NET SignalR将是通知集线器的完美解决方案.
当我运行这两项服务时,他们不能一起工作.如果我删除SignalR,Self-host API开始完美运行.另一种方式:删除Windows服务,SignalR完美地工作.
我不确定我的问题是什么,是否有可能同时为asp.net Web API和SignalR自行托管一个Windows服务?
我尝试了相同和不同的端口,但它不起作用.
另一个问题是,是否可以将两者放在同一个端口上?
我安装的包:
Microsoft.AspNet.WebApi.SelfHost
Microsoft.AspNet.SignalR.SelfHost
Microsoft.AspNet.WebApi.Owin
Microsoft.Owin.Host.HttpListener
Microsoft.Owin.Hosting
Microsoft.Owin.Cors
Run Code Online (Sandbox Code Playgroud)
我的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.SelfHost;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
using Microsoft.Owin.Cors;
using Microsoft.Owin;
[assembly: OwinStartup(typeof(WindowsService_HostAPI.Startup))]
namespace WindowsService_HostAPI
{
partial class SelfHostService : ServiceBase
{
IDisposable SignalR;
EventLog myLog = new EventLog();
private const string appId = "MYHUB";
public SelfHostService()
{ …Run Code Online (Sandbox Code Playgroud) 我有一个服务器与ubuntu 16.04,kestrel和nginx作为代理服务器重定向到我的应用程序所在的localhost.我的应用程序在Asp.Net Core 2.我正在尝试添加推送通知和使用SignalR核心.在localhost上一切都运行良好,并在免费托管与iis和Windows.但是当我在linux服务器上部署我的应用程序时,我有一个错误:
signalr-clientES5-1.0.0-alpha2-final.min.js?v = kyX7znyB8Ce8zvId4sE1UkSsjqo9gtcsZb9yeE7Ha10:1个WebSocket连接到'ws://devportal.vrweartek.com/chat?id = 210fc7b3-e880-4d0e-b2d1-a37a9a982c33'失败:WebSocket握手期间出错:意外的响应代码:204
但是只有当我通过我的站点名称从不同的机器请求我的站点时才会出现此错误.当我通过localhost:port从服务器请求站点时,一切都很好.所以我认为nginx存在问题.我读到我需要配置它来处理websocket,这些websocket用于signalr建立连接,但我没有成功.可能只有一些愚蠢的错误?
signalr ×10
signalr-hub ×5
c# ×4
asp.net ×2
asp.net-mvc ×2
.net ×1
api ×1
asp.net-core ×1
javascript ×1
json.net ×1
nginx ×1
requirejs ×1
timer ×1