我目前有一个用.Net编写的TCP服务器应用程序,它接收并向客户端提交消息.我正在寻找构建Web应用程序,因此需要通信层.
我已经构建了一个Node.JS + Socket.IO应用程序,它连接到我的TCP服务器,然后将通信推送到Web应用程序,一切正常.
我刚刚读到有关SignalR作为将其保留在.Net堆栈中的替代方法.
不过,我也发现,我可以写一个C#的WebSocket服务器,一个基本的演示在这里
我认为这个基本服务器就是SignalR,但显然有更多的功能吗?
我想要决定的是,我只是将我当前的TCP应用程序附加到Websocket服务器上,还是单独使用SignalR或Node.js路由?出于兴趣,SignalR应用程序如何运行,是作为Windows服务,控制台应用程序还是IIS服务?
我想从服务器调用特定客户端,而不是向所有客户端广播.问题是我在一些AJAX请求的范围内(在.aspx代码后面说),而不是在Hub或PersistentConnection中,所以没有Clients属性 - 而且那个调用ajax(jquery)的客户端不是客户端我想发送信号消息!
现在,我有一个在JS页面加载上调用的集线器,它将新客户端注册到服务器静态列表中,所以我有客户端Guids.但是不知道如何使用它从服务器向特定客户端发送消息.
我正在使用SignalR的中心功能(https://github.com/SignalR/SignalR)向所有订阅的客户端发布消息:
public class NewsFeedHub : Hub
public void Send(string channel, string content)
{
Clients[channel].addMessage(content);
}
Run Code Online (Sandbox Code Playgroud)
这通过Javascript调用"发送"时工作正常,但我也希望Web应用程序发布消息(来自ASP.NET MVC操作方法).我已经尝试实例化新对象ob NewsFeedHub并调用Send方法,但这会导致错误(因为未设置Hub的基础"连接").有没有办法在没有连接的情况下使用Hub?
我正在开发一个Asp.Net MVC 4应用程序,我在其中使用SignalR 2.0.1并使用Owin Startup类映射它,并且它最初工作正常.
突然间,当我尝试重建我的应用程序时,它说类型名称空间IAppbuilder无法找到.
以下是我的启动课程
using Microsoft.Owin;
using Owin;
using WhiteBoardApp;
namespace WhiteBoardApp
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也安装了Owin包,由于某些原因我找不到Owin Startup类,所以我只添加了一个普通类并包含了所需的所有引用.我可以知道我在哪里弄错了
我们使用C#应用程序SignalR和Amazon's ElastiCache作为背板.然而,即使SignalR允许屏蔽掉它仍然发送CONFIG到静默ElastiCache失败的某些命令SignalR(CONFIG不受支持ElastiCache).现在我们SignalR通过删除自动重新配置例程的更改来编译我们自己的二进制文件.
我想知道是否有其他人在这个问题上绊倒并且想看看你是如何解决它的.
最好的想法是为ElastiCache(像Twitter代理)编写代理,但这是一项艰巨的任务.
提前致谢.
我已经看到了用于asp.net MVC聊天应用程序的signalR vs html5 websockets,但它没有100%回答我的问题,因为它基于HTML5 WebSockets,微软可能已经在.NET 4.5中使用他们的WebSocket对象进行了扩展.
我想知道WebSocket功能是否确实与SignalR相同,并且在WebSockets不可用时又回退到长轮询?当然,微软在采用这种技术的方法中会采用与SignalR相同的技术吗?
编辑:
对于其他任何想知道这个的人,我发现这个评论最有助于理解这个场景以及为什么我会使用SignalR:
嗯,他们不是真的.到目前为止,IIS和ASP.NET没有内置任何受支持的WebSockets,因此SignalR项目必须自己构建它.现在微软正在提供管道,SignalR可以轻松切换到使用微软的实现,无论是自己的还是替代.SignalR是一个实现细节的抽象,WebScockets类是实现细节
我已经开始使用SignalR,并试图找出何时发生Hub Reconnect.我在网上找不到任何令人满意的解释.有人可以解释何时/为什么会发生重新连接?
我在窗口服务中实现了signalR.
private IDisposable SignalR { get; set; }
public void Configuration(IAppBuilder app)
{
var hubconfig=new Microsoft.AspNet.SignalR.HubConfiguration();
hubconfig.EnableJSONP = true;
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR(hubconfig);
}
private void StartSignalRServer(StringBuilder sbLog)
{
try
{
this.SignalR = WebApp.Start(ServerURI); //This throws exception
//this.SignalR= WebApp.Start<Startup>(ServerURI);
sbLog.Append(string.Format("{0}--------SignalR Server Started------",Environment.NewLine));
}
catch (Exception ex)
{
sbLog.Append(string.Format("{0}Exception in StartSignalRServer=>{1}", Environment.NewLine,ex.Message));
}
}
Run Code Online (Sandbox Code Playgroud)
例外:无法找到给定输入的服务器工厂:Microsoft.Owin.Host.HttpListener
新发布的ASP.NET WebHooks和Signal-R有什么区别?有什么优点或缺点?每种技术的用例有哪些?
我在我的项目中使用SignalR(https://github.com/SignalR/SignalR).从这里https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs我明白了如何使用Hubs.但"信号器/集线器"脚本给出了404错误.这是在视图源中的URL:http:// localhost:50378/signalsr/hubs给出404错误
这是我的代码:Hub:
public class Test:Hub
{
public void Start()
{
Caller.guid = Guid.NewGuid();
}
public void TestMethod()
{
Clients.show("test", Caller.guid);
}
}
Run Code Online (Sandbox Code Playgroud)
ASPX:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Title</title>
<script src="../Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
<script src="../Scripts/jquery.signalR.js" type="text/javascript"></script>
<script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
var test = $.connection.test;
$("#btnTest").click(function () {
test.testMethod();
});
test.show = function (text, guid) {
if (guid != test.guid) //notify all clients except the caller
alert(text);
};
$.connection.hub.start(function () { test.start(); …Run Code Online (Sandbox Code Playgroud)