我已成功使用signalR在ASP.NET MVC3中创建一个简单的聊天应用程序.在我的开发机器上,一切都很棒.
应用程序在具有多个Web服务器的Web场环境中是否以相同的方式工作(例如,上线)?signalR如何跨这些服务器管理其集线器?
谢谢.
我们有一个.NET客户端,它使用SignalR来调用Server方法,但参数看起来非常大,对于这种情况如何解决呢?
客户代码:
public async Task FooAsync()
{
var hubConnection = new HubConnection(...);
await hubConnection.Start();
var hubProxy = hubConnection.CreateHubProcx("ValueHub");
//the content is very long, about 11776065 bytes (11MB)
var content = File.ReadAllText(...);
hubProxy.Invoke("Send", content);
...
}
Run Code Online (Sandbox Code Playgroud)
服务器代码:
[HubName("ValueHub")]
public class ValueHub : Hub
{
public void Send(string json)
{
}
}
Run Code Online (Sandbox Code Playgroud)
从异常堆栈和源代码中,我发现SignalR内部使用HttpClient了FormUrlEncodedContent类型HttpContent,也许限制来自这里.
System.UriFormatException was unhandled
HResult=-2146233033
Message=Invalid URI: The Uri string is too long.
Source=System
StackTrace:
at System.UriHelper.EscapeString(String input, Int32 start, Int32 end, Char[] dest, …Run Code Online (Sandbox Code Playgroud) 我想对SignalR和WebRTC最简单的实现进行测试.我在https://github.com/foyzulkarim/WebRtc中托管了代码
我制作了两个不同的文件"index.html"和"index1.html".在index.html中,我通过signalr广播了一个视频文件,并且进展顺利.但是,当我用WebCam的Feed替换现有的视频文件时,它开始出错.
运行几秒后,我开始收到此错误"WebSocket已处于CLOSING或CLOSED状态." 我试图节流但没有变化,仍然得到错误.知道为什么会这样吗?
错误图片

您可以查看视频我 http://1drv.ms/1meM1OI
我正在考虑使用实时消息替换我们公司的监控仪表板.
在我们公司,我们有一个仪表板,显示超过700台物理机的(相当详细的)状态,以及添加的元信息.它大约在1.5年前由我的一位同事在ASP.NET Web Forms(我不喜欢)中构建,以使调度员能够协调我们的技术人员应该去解决问题的位置(这些机器位于不同的地理位置) ).
不幸的是,该应用程序使用30秒的完整页面自动刷新,后面有一个大查询.它很慢,它完全重置你的视图(正如我所说,仪表板包含超过700多台机器).我个人想改变这个.使用起来非常烦人.我们的调度员已经学会了接受这一点,但我认为他们应该得到更好的待遇.
我想在新的仪表板上显示相同的内容,但具有实时更新和"消息"日志.在我们公司,我们在MS堆栈上工作了大约90%,因此我计划使用ASP.NET MVC,SignalR,SQL Server和Knockout.
看看这个简单的图表:
+----+ +----+ +----+ +----+ +----+ +----+ +----+
| PC | | PC | | PC | | PC | | PC | | PC | | PC | ... ...
+--+-+ +--+-+ +-+--+ +--+-+ +--+-+ +--+-+ +--+-+
| | | | | | |
| +--+ +--+ +----+ <-+ <-+ <-+
| | | |
+---v---v-----v-----v+ +-----------------------+
| | TCP/IP | |
| Monitoring Backend +---------> Data …Run Code Online (Sandbox Code Playgroud) 我今天一直在尝试使用SignalR,它非常整洁.基本上我想要实现的目标如下:
一旦设备连接,它应该向第一个发送消息.如果有超过1个连接的设备,我想发送两条消息.除最后连接的客户端之外的所有人.并且仅向最后连接的客户端发送一条消息.
当我将它放在自定义API控制器中并且基本上调用动作时,我一直使用的代码非常完美,但这不是我想要的.
我想在OnConnected没有任何用户交互的情况下在设备连接时立即发送消息,但是当我将代码放在OnConnected覆盖内时它会停止工作.它不再发送给特定客户端(首先连接和最后连接).
我希望有人能够帮助我解决这个问题,因为我现在已经敲了几个小时.
public override System.Threading.Tasks.Task OnConnected()
{
UserHandler.ConnectedIds.Add(Context.ConnectionId, UserHandler.ConnectedIds.Count + 1);
int amountOfConnections = UserHandler.ConnectedIds.Count;
var lastConnection = UserHandler.ConnectedIds.OrderBy(x => x.Value).LastOrDefault();
var allExceptLast = UserHandler.ConnectedIds.Take(amountOfConnections - 1).Select(x => x.Key).ToList();
if (amountOfConnections == 1)
{
Clients.Client(UserHandler.ConnectedIds.First().Key).hello("Send to only(also first) one");
}
else
{
Clients.Clients(allExceptLast).hello("Send to everyone except last");
Clients.Client(lastConnection.Key).hello("Send to only the last one");
}
return base.OnConnected();
}
Run Code Online (Sandbox Code Playgroud) 当我使用datetime列过滤器执行查询时
WHERE [Order].CreatedOn >= @CreatedOn
Run Code Online (Sandbox Code Playgroud)
使用a SqlDependency,对数据源的更改将触发SqlDependency.OnChange事件,但SqlDataReader与之关联的SqlCommand不会返回数据(reader.HasRows始终返回false).
当我只是将我的SQL语句中的过滤条件更改为
WHERE [Order].StatusId = 1"
Run Code Online (Sandbox Code Playgroud)
它只是工作正常和SqlDataReader返回数据(reader.HasRows返回true)
码:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace SignalRServer
{
public partial class DepartmentScreen : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var u = System.Security.Principal.WindowsIdentity.GetCurrent().User;
var UserName = u.Translate(Type.GetType("System.Security.Principal.NTAccount")).Value;
CheckForNewOrders(DateTime.Now);
}
private void CheckForNewOrders(DateTime dt) …Run Code Online (Sandbox Code Playgroud) 在我的集线器中,如何获取所有当前连接的connectionId的列表?
从本质上讲,我正在进行一些加密(是的,我已经与一群人交谈,没有任何内置工作)并且Aes每个连接都有一个实例.所以基本上当我需要向所有客户端发送消息时,我不能只做Clients.All,而是必须手动枚举所有客户端,获取其Aes编码器(通过id),然后向其发送消息.
我在控制台应用程序和WPF客户端中有一个signalR集线器.在启动时,signalR连接初始化,并应始终保持活动状态.每秒使用当前SystemTime将消息从服务器推送到客户端(这是您可以在带有'SystemTimeUpdateNotification'的日志中看到的)
我现在描述的行为是在Windows7设备上:每隔一段时间我就会看到客户端失去与服务器的连接.由于某种原因,客户端检测到它已处于非活动状态并停止连接.我不知道'自上午4/20/2017 3:04:06 AM'和'超时00:00:50'来自哪里'非活动'.如果我在同一时间检查服务器上的日志,我可以看到没有keepalive消息.
2017-04-20 05:04:04.0728,Trace,Received notification SystemTimeUpdateNotification
2017-04-20 05:04:05.0859,Trace,Received notification SystemTimeUpdateNotification
2017-04-20 05:04:06.0999,Trace,Received notification SystemTimeUpdateNotification
2017-04-20 05:05:13.1020,Trace,Received notification SystemTimeUpdateNotification
2017-04-20 05:05:14.1160,Trace,Received notification SystemTimeUpdateNotification
2017-04-20 05:05:14.5511,Info,The client has been inactive since 4/20/2017 3:04:06 AM and it has exceeded the inactivity timeout of 00:00:50. Stopping the connection.
2017-04-20 05:05:14.5871,Info,SignalR connectionstate changed from 'Connected' to 'Disconnected'
2017-04-20 05:05:14.5871,Trace,Received notification NotificationConnectionStateChanged
2017-04-20 05:05:14.5981,Info,Disconnecting...
2017-04-20 05:05:14.5981,Info,Cancel ongoing operations
2017-04-20 05:05:19.6104,Info,SignalR connectionstate changed from 'Disconnected' to 'Connecting'
2017-04-20 05:05:19.6104,Trace,Received notification NotificationConnectionStateChanged
2017-04-20 05:05:19.6104,Info,Disconnecting... … 我正在尝试在ASP.NET Core 3.0 Blazor(服务器端)应用程序与Azure SignalR服务之间建立连接。最后,我将SignalR客户端(服务)注入到一些Blazor组件中,以便它们可以实时更新我的UI / DOM。
我的问题是,.StartAsync()在集线器连接上调用方法时,我收到以下消息:
响应状态代码不表示成功:404(未找到)。
该文件加载了我对SignalR服务的配置,包括URL,连接字符串,键,方法名称和集线器名称。这些设置在静态类中捕获,SignalRServiceConfiguration并在以后使用。
public static class BootstrapSignalRClient
{
public static IServiceCollection AddSignalRServiceClient(this IServiceCollection services, IConfiguration configuration)
{
SignalRServiceConfiguration signalRServiceConfiguration = new SignalRServiceConfiguration();
configuration.Bind(nameof(SignalRServiceConfiguration), signalRServiceConfiguration);
services.AddSingleton(signalRServiceConfiguration);
services.AddSingleton<ISignalRClient, SignalRClient>();
return services;
}
}
Run Code Online (Sandbox Code Playgroud)
public class SignalRServiceConfiguration
{
public string ConnectionString { get; set; }
public string Url { get; set; }
public string MethodName { get; set; }
public string Key { get; set; }
public string HubName { …Run Code Online (Sandbox Code Playgroud) c# signalr signalr.client asp.net-core-signalr azure-signalr
我想要实现的是一个 POC,其中两个用户使用 ASP.NET Core 和 WebRTC(如果需要 SignalR)在对等视频通话中聊天。
我阅读了很多关于 WebRTC的文档,但我发现的大多数示例都不起作用,因为它们显示了该协议的旧实现(例如本教程)。另外,我在Github上看到了这个实现,但它使用getUserMedia. 如果我使用最新版本的adapter.js.
我用谷歌搜索了一下,我发现了其他例子,比如一篇关于html5rocks 的文章:在这种情况下,indx.html在本地工作,但如果我将它部署在服务器上,我会收到这个错误。
我尝试使用的最后一个脚本是Simple Peer。
如果我理解正确,新的正确方法是使用RTCPeerConnectionand RTCDataChannel。我找不到工作示例。
signalr ×10
c# ×6
asp.net ×4
webrtc ×2
asp.net-core ×1
connection ×1
html5-canvas ×1
html5-video ×1
knockout.js ×1
real-time ×1
signalr-hub ×1
timeout ×1
websocket ×1