标签: signalr

SignalR - 如何禁用WebSockets

我升级到.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)

signalr

15
推荐指数
2
解决办法
2万
查看次数

SignalR向单个connectionId发送消息

我有一个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)

c# asp.net signalr signalr-hub

15
推荐指数
1
解决办法
2万
查看次数

在引用的项目中映射集线器

http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-self-host

在我的例子中,我的集线器位于从项目代码引用的项目中,该项目代码可以自动托管应用程序.

在线connection.Start().Wait();我得到一个例外.以下是该行抛出的异常序列:

  1. 指定的注册表项不存在 System.IO.IOException
  2. 'MessageHub'集线器无法解析 InvalidOperationException
  3. 远程服务器返回错误:(500)内部服务器错误 WebException

引用项目中的消息中心类的签名是public class MessageHub : Hub.

更新:为了测试该理论,我将hub类从引用的项目移动到我的测试项目中并更新了命名空间.有效.所以我认为这里的理论是合理的......默认的集线器解析在参考项目或单独的命名空间中找不到集线器.

如何说服MapHubs在引用的项目中找到测试中心?

signalr

15
推荐指数
1
解决办法
4739
查看次数

SignalR如何决定使用哪种传输方法?

SignalR是用于实时连接的传输的抽象.我仍然想知道它究竟是如何确定应该使用哪种传输方法,具体取决于各种因素.我使用可用的文档做了一些研究,并查看了源代码,并想出了它是如何工作的.

所以我的实际问题是,以下流程图是正确的还是我错过了什么?

SignalR的流程图假设运输协商

更新:

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

在此输入图像描述

signalr signalr.client

15
推荐指数
1
解决办法
1725
查看次数

如何使用SignalR加入组

我是使用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)

javascript c# signalr

15
推荐指数
2
解决办法
2万
查看次数

SignalR .Net客户端:如何重新建立连接

我看过这篇文章

在某些应用程序中,您可能希望在连接丢失并且重新连接尝试超时后自动重新建立连接.为此,您可以从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)

发生异常:连接尚未建立.

我希望它一直持续到服务器运行正常时才成功.不要抛出异常.我怎么做到这一点.

有任何想法吗?

谢谢

client signalr

15
推荐指数
3
解决办法
1万
查看次数

如何从外部调用SignalR集线器方法?

这是我的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)

我的问题是什么?

c# signalr signalr-hub

15
推荐指数
2
解决办法
2万
查看次数

MVC SignalR服务器和Windows服务SIgnalR客户端之间的SignalR

我已经知道在这里问我可以在一个普通的旧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服务中?一个例子会很棒!

asp.net-mvc windows-services signalr

15
推荐指数
1
解决办法
1万
查看次数

ASP.NET Core RC2 SignalR Hub上下文请求线程

我目前正在尝试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中的请求范围之外获取集线器上下文?

asp.net signalr asp.net-core asp.net-core-1.0 .net-core-rc2

15
推荐指数
3
解决办法
1万
查看次数

Windows 10 32位阻止ajax调用localhost与网络错误0x2efd

我们有一个应用程序使用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将会成功.

javascript ajax jquery signalr microsoft-edge

15
推荐指数
1
解决办法
6734
查看次数