Tag: signalsr

SignalR在一台计算机上工作但不在其他计算机上

我们有一个托管SignalR的Windows服务。 相同的代码在不同的计算机上运行,​​结果不同。 如果我在笔记本电脑上访问此链接,它可以正常工作: https://localhost/signalr/negotiate 响应: { “Url”:”/signalr”, “ConnectionToken”:”AQAAANCMnd8BFdERjHoAwE/…==”, “ConnectionId”:”0a09e290-c8af-48d6-b791-f05e3b8930b0″, “KeepAliveTimeout”:20.0, “DisconnectTimeout”:30.0, “ConnectionTimeout”:110.0, “TryWebSockets”:false, “ProtocolVersion”:”1.2″, “TransportConnectTimeout”:5.0, “LongPollDelay”:0.0 }如果我在桌面上转到同一个链接,我会得到这个: 我检查了IE设置,我的笔记本电脑和桌面之间的TLS设置是相同的。 我还检查了许多其他IE设置。 编辑 :在好的PC上,在浏览器中获取证书警告。 不在非工作PC上发生。 以下是运行SignalR的代码: protected override void OnStart() { LogUtility.LogInformation(“SignalRHubHostController::OnStart()”); string url = this.Application.Configuration.SignalRHubHostController.HostUrl; UriBuilder uri = new UriBuilder(url); string schemeOverride = this.Application.Configuration.SignalRHubHostController.UriSchemeOverride; if (!String.IsNullOrWhiteSpace(schemeOverride)) uri.Scheme = schemeOverride; LogUtility.LogInformation(String.Format(CultureInfo.InvariantCulture, “Using [{0}] as the SignalR hub URL.”, […]

关于在控制台应用程序中托管SignalR

我有一个代码,在控制台应用程序中托管SignalR。 这是代码。 Install-Package Microsoft.Owin.Hosting -pre Install-Package Microsoft.Owin.Host.HttpListener -pre Install-Package Microsoft.AspNet.SignalR.Owin -pre using System; using Microsoft.AspNet.SignalR; using Microsoft.Owin.Hosting; using Owin; namespace SignalR.Hosting.Self.Samples { class Program { static void Main(string[] args) { string url = “http://172.0.0.01:8080”; using (WebApplication.Start(url)) { Console.WriteLine(“Server running on {0}”, url); Console.ReadLine(); } } } class Startup { public void Configuration(IAppBuilder app) { // […]

SignalR和WinRT客户端:不要在Start()上调用Wait()

我对SignalR的官方文档有疑问 – Hubs API Guide – .NET Client 。 在“ 如何建立连接”部分中 。 它写了以下内容: Start方法异步执行。 要确保在建立连接之后不执行后续代码行,请在ASP.NET 4.5异步方法中使用await,或在同步方法中使用.Wait()。 不要在WinRT客户端中使用.Wait()。 有谁知道不打电话给Wait()的具体原因是什么? 此外,当我有一个WinRT客户端,我与hubProxy.Invoke()调用服务器时,这也适用吗? 谢谢您的帮助!

SignalR – 如何在集线器中执行异步任务?

我正在尝试使用C#5异步/等待function创建SignalR应用程序,但每当代码运行时,它将抛出System.InvalidOperationException。 这是重现问题的最简单的代码。 public class SampleHub : Hub { public Task GetGoogle() { var http = new WebClient(); return http.DownloadStringTaskAsync(“http://www.google.com”); } } 例外细节: 此时无法启动异步操作。 异步操作只能在异步处理程序或模块中启动,或者在页面生命周期中的某些事件中启动。 如果在执行页面时发生此exception,请确保将页面标记为。 堆栈跟踪: at System.Web.AspNetSynchronizationContext.OperationStarted() at System.Net.WebClient.DownloadStringAsync(Uri address, Object userToken) at System.Net.WebClient.DownloadStringTaskAsync(Uri address) at System.Net.WebClient.DownloadStringTaskAsync(String address) 在客户端,Javascript看起来像这样。 $.connection.hub.start().done(function () { $(‘#google’).click(function () { var google = sample.server.getGoogle(); console.log(google); }); }); 我做错了什么? 有没有解决方法? […]

SignalR:如何从服务器/ C#真正调用集线器的方法

我正在尝试改进我的应用程序,这将需要从C#而不是javascript调用集线器。 在我的应用中添加任务的当前工作流程是: 进行API调用以将数据添加到数据库 将新记录返回给AngularJS控制器 从控制器调用hub的方法 集线器正确地向客户广播 我想做的是绕过从我的AngularJS控制器调用hub的方法,并直接从我的API控制器方法调用它。 这就是我的中心目前的样子: public class TaskHub : Hub { public void InsertTask(TaskViewModel task) { Clients.Caller.onInsertTask(task, false); Clients.Others.onInsertTask(task, true); } } 关于这个主题有很多SO线程,但是我读过的所有内容都会让我在API控制器中添加以下代码: var hubContext = GlobalHost.ConnectionManager.GetHubContext(); hubContext.Clients.All.onInsertTask(task); 这有很多问题。 首先,我希望客户端广播调用存在于单个类中,而不是直接从我的API控制器调用。 其次, hubContext是hubContext的一个实例,而不是IHubCallerConnectionContext 。 这意味着我只能访问所有客户端,并且无法像我正在做的那样向Caller和Others广播不同的响应。 有没有办法从C# 真正调用集线器的方法,理想情况下,可以访问不同的调用方选项? 理想情况下,我可以从我的API控制器(或者更好的DI解决方案)中执行以下操作: var taskHub = new TaskHub(); taskHub.InsertTask(task); 提前致谢。 解 对于后代,根据Wasp的建议,我认为我会包含完整的解决方案。 首先,我修改了我的javascript(AngularJS)服务,将SignalR连接ID包含在API调用的自定义请求标头中,在本例中为INSERT: var addTask = function (task) […]

如何为SignalR生成API文档

有没有办法做到这一点? 我有swashbuckle为我的其他API生成内容但我不相信它适用于SignalR。

SignalR:检测客户端上的连接状态

我已经看到了如何通过绑定到.disconnect事件来捕获与SignalR在客户端的断开连接事件。 现在我已经完成了这个,我想让客户端进入“等待重新连接循环”,它不断尝试连接,直到成功或用户取消。 集线器是否公开连接状态属性? 我在想(伪代码) var isConnected; function onConnected() { isConnected = true; } hub.disconnect = function() { while(hub.notconnected) { connect(); }

OWIN + SignalR + Autofac

摘自: http : //docs.autofac.org/en/latest/integration/signalr.html : “OWIN集成中的一个常见错误是使用GlobalHost。在OWIN中,您可以从头开始创建配置。在使用OWIN集成时,不应该在任何地方引用GlobalHost。” 这听起来很合理。 但是,如何从ApiController解析IHubContext ,就像通常的(非OWIN): GlobalHost.ConnectionManager.GetHubContext() ? 我无法在任何地方找到这个参考,我现在唯一的方法是在同一个容器中注册HubConfiguration实例并执行以下操作: public MyApiController : ApiController { public HubConfiguration HubConfig { get; set; } // Dependency injected by // PropertiesAutowired() public IHubContext MyHubContext { get { return HubConfig .Resolver .Resolve() .GetHubContext(); } } // … } 但是,这对我来说似乎很啰嗦。 这样做的正确方法是什么? 更具体一点,是否有一种注册IConnectionManager的简洁方法? 编辑: 我最终做的是: var container = builder.Build(); […]

从Controller调用SignalR Core Hub方法时的连接ID

这是另一个问题和答案的后续行动。 从控制器调用HubContext.Clients.Caller或HubContext.Clients.Others什么影响? 我看到它取决于连接ID 。 在这种情况下它会有什么价值? 如果连接ID(以及Caller和Others )无效,那么(从控制器操作中)我如何获得可以与HubContext.Clients方法一起使用的连接ID(对于当前调用Web API的客户端)?

async关键字和TaskScheduler的选择

我想知道编译器在使用async关键字进行编译时选择TaskScheduler的方式背后的原因。 我的测试方法由OnConnectedAsync方法上的SignalR(ASP.NET主机,IIS8,websocket传输)调用。 protected override async Task OnConnectedAsync(IRequest request, string connectionId) { SendUpdates(); } 在Current同步上下文中启动任务将导致System.Web.AspNetSynchronizationContext.OperationStarted()中的InvalidOperationException 此时无法启动异步操作。 异步操作只能在异步处理程序或模块中启动,或者在页面生命周期中的某些事件中启动。 如果在执行页面时发生此exception,请确保将页面标记为 。 精细。 使用此SendUpdates定义,我得到以上exception: private async void SendUpdates() { Task.Run(async () => { while (true) { await Task.Delay(1000); await Connection.Broadcast(“blabla”); } }); } 但更有趣的是,当我没有得到例外。 以下作品: private void SendUpdates() 以下也有效 private async Task SendUpdates() 这最后一个也有效,但它与上面的例子基本相同。 private Task SendUpdates() { return […]