我升级到.NET 4.5,现在SignalR似乎坚持在Firefox/Chrome中使用WebSockets - 尽管我只是在没有WebSocket服务器的Windows 7上.
请求显然失败了:
Firefox can't establish a connection to the server at ws://www.site.local/signalr?connectionData=
Run Code Online (Sandbox Code Playgroud)
如何强制SignalR忘记Websockets并使用Long Polling,还是有办法为Windows 7设置我缺少的Websockets?
更新....我正在使用SignalR 0.4:
<package id="SignalR" version="0.4.0" />
<package id="SignalR.Hosting.AspNet" version="0.4.0.0" />
<package id="SignalR.Js" version="0.4.0.1" />
<package id="SignalR.Server" version="0.4.0.0" />
<package id="SignalR.StructureMap" version="0.4.1" />
Run Code Online (Sandbox Code Playgroud) 我有一个asp.net经典网站.我已经有了SignalR基本功能(一个客户端向其他客户端发送消息).但现在我只想将消息发送到特定的connectionID.
我的中心:
** [HubName("chatHub")]
public class ChatHub : Hub
{
public static List<string> messages = new List<string>();
public void GetServiceState()
{
Clients.updateMessages(messages);
}
public void UpdateServiceState()
{
messages.Add(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"));
Clients.updateMessages(messages);
}
}**
Run Code Online (Sandbox Code Playgroud)
Asp代码:
<script type="text/javascript">
$(function () {
// creates a proxy to the health check hub
var healthCheckHub = $.connection.chatHub;
console.log($.connection.hub)
// handles the callback sent from the server
healthCheckHub.updateMessages = function (data) {
$("li").remove();
$.each(data, function () {
$('#messages').append('<li>' + this + '</li>');
console.log($.connection);
});
};
$("#trigger").click(function () …Run Code Online (Sandbox Code Playgroud) 在我的例子中,我的集线器位于从项目代码引用的项目中,该项目代码可以自动托管应用程序.
在线connection.Start().Wait();我得到一个例外.以下是该行抛出的异常序列:
引用项目中的消息中心类的签名是public class MessageHub : Hub.
更新:为了测试该理论,我将hub类从引用的项目移动到我的测试项目中并更新了命名空间.有效.所以我认为这里的理论是合理的......默认的集线器解析在参考项目或单独的命名空间中找不到集线器.
如何说服MapHubs在引用的项目中找到测试中心?
SignalR是用于实时连接的传输的抽象.我仍然想知道它究竟是如何确定应该使用哪种传输方法,具体取决于各种因素.我使用可用的文档做了一些研究,并查看了源代码,并想出了它是如何工作的.
所以我的实际问题是,以下流程图是正确的还是我错过了什么?

更新:
感谢您的输入!这是根据您的修复程序的更新版本.但我仍然不确定一件事:如果没有明确检查IE9 +是否被使用,如果它不是IE并且不支持SSE,是什么触发从ForeverFrame到LP的回退?

我是使用SignalR(今天开始)的新手,非常简单地向所有连接的客户发送消息,但现在我想发送给一个组.我找不到关于如何在客户端加入的简单文档.如果有人可以提供帮助,我怎么能简单地加入javascript方面的小组.谢谢你的帮助.
public class EventHub : Hub
{
public void SendNewMedia(MediaInfoViewModel model,Guid eventId)
{
Clients.Group(eventId.ToString()).setupmedia(model);
}
}
//Controller that is sending client new data
var eventHub = GlobalHost.ConnectionManager.GetHubContext<EventHub>();
var result = eventHub.Clients.Group(eventId.ToString()).setupmedia(eventViewer);
//Finally the javascript. Not sure how to setup just for a group
$(function () {
var event = $.connection.eventHub;
event.client.setupmedia = function (newMedia) {
$('#photolist').prepend('<li><img src="' + newMedia.MediaUrl + '" class="img-polaroid span2"/></li>');
};
$.connection.hub.start(function() {
event.server.create(eventID);//I know this is wrong but not sure how to connect
}).done(function () { …Run Code Online (Sandbox Code Playgroud) 我看过这篇文章
在某些应用程序中,您可能希望在连接丢失并且重新连接尝试超时后自动重新建立连接.为此,您可以从Closed事件处理程序(JavaScript客户端上的已断开事件处理程序)调用Start方法.您可能希望在调用Start之前等待一段时间,以避免在服务器或物理连接不可用时过于频繁地执行此操作.以下代码示例适用于使用生成的代理的JavaScript客户端.
当我从Closed事件中调用Start方法时
connection.Closed += connection_Closed;
static void connection_Closed()
{
Console.WriteLine("connection closed");
ServerConnection.Start().Wait();
}
Run Code Online (Sandbox Code Playgroud)
发生异常:连接尚未建立.
我希望它一直持续到服务器运行正常时才成功.不要抛出异常.我怎么做到这一点.
有任何想法吗?
谢谢
这是我的Hub代码:
public class Pusher : Hub, IPusher
{
readonly IHubContext _hubContext = GlobalHost.ConnectionManager.GetHubContext<Pusher>();
public virtual Task PushToOtherInGroup(dynamic group, dynamic data)
{
return _hubContext.Clients.Group(group).GetData(data);
}
}
Run Code Online (Sandbox Code Playgroud)
我想用这段代码在另一个项目中调用此方法:
var pusher = new Pusher.Pusher();
pusher.PushToOtherInGroup("Test", new {exchangeTypeId, price});
Run Code Online (Sandbox Code Playgroud)
我想要调用PushToOtherInGroup,在调用方法时我没有得到任何错误.但是推送器不起作用.
这是我的Ui代码:
$(function() {
hub = $.connection.pusher;
$.connection.hub.start()
.done(function() {
hub.server.subscribe('newPrice');
console.log('Now connected, connection ID=' + $.connection.hub.id);
})
.fail(function() { console.log('Could not Connect!'); });
});
(function() {
hub.client.GetData = function (data) {
debugger;
};
});
Run Code Online (Sandbox Code Playgroud)
我的问题是什么?
我已经知道在这里问我可以在一个普通的旧Windows服务中使用SignalR.我想在Windows服务之间作为SignalR客户端和ASP.NET MVC SignalR服务器进行通信.它说,我使用了这个集线器指南
指定URL的服务器代码
app.MapSignalR("/signalr", new HubConfiguration());
Run Code Online (Sandbox Code Playgroud)
如果我这样做,消息会在哪里发生?进行新的HubConfiguration时,什么是集线器?
它说我可以联系
NET client code that specifies the URL
var hubConnection = new HubConnection("http://contoso.com/signalr", useDefaultUrl: false);
Run Code Online (Sandbox Code Playgroud)
我会在我的Windows Server中使用它,但如果我将文本发送到服务器上的http://myserver.com/signalr,我该如何获取它?什么集线器?
另外最好把它放在Windows服务中?一个例子会很棒!
我目前正在尝试RC2发布,ASP.NET Core我遇到了一个问题SignalR.我需要能够在请求线程之外向客户端发送消息.
现在在完整的.NET框架中,您可以这样做:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.<SendMessage>()
Run Code Online (Sandbox Code Playgroud)
但在ASP.NETCore中没有GlobalHost.
我发现了一个类似的问题: 如何在vNext项目中获取SignalR Hub上下文?
第二个答案提供了一种在请求线程之外获取hubcontext的方法,但这也不起作用ASP.NET Core.
所以我的问题是:如何在ASP.NET Core中的请求范围之外获取集线器上下文?
我们有一个应用程序使用SignalR与本地的扫描仪驱动程序交谈,这些驱动程序已经在IE,Chrome和Firefox上运行了几年,这对于下载SignalR的hubs js头文件没有问题.一旦Edge问世,我们看到了与localhost交谈的问题,经过长时间的努力寻找允许它进行通信的设置(以及他们没有找到解决方案的微软票证的许多小时),我们决定添加标头以允许Edge授予访问域名:
Access-Control-Allow-Origin: https://localhost:11000
这似乎有效,但我们没有注意到它适用于64位Windows 10 Edge,但没有在32位Windows 10 Edge上运行.我花了几个小时降低所有区域的所有安全设置并禁用保护模式,尝试使用不同的ajax技巧来拉取文件,但继续得到错误:
SCRIPT7002: XMLHttpRequest: Network Error 0x2efd, Could not complete the operation due to error 00002efd.
以下伪代码失败:
$.ajax({
url: "https://localhost:11000/signalr/hubs",
crossDomain: true,
success: function (data) {
console.log("success");
},
error: function (jqXHR, textStatus, errorThrown) {
console.log("error:");
console.log(jqXHR);
}
});
Run Code Online (Sandbox Code Playgroud)
我正在寻找有关设置或其他任何尝试的洞察力,或者是否有其他人已经看到此问题.另外一条信息,fiddler没有显示任何流量的呼叫,所以它似乎被浏览器阻止.同样在与Edge-IE失败的同一台计算机上,Chrome和FF将会成功.
signalr ×10
c# ×3
asp.net ×2
javascript ×2
signalr-hub ×2
ajax ×1
asp.net-core ×1
asp.net-mvc ×1
client ×1
jquery ×1