标签: signalr

RavenDB和SignalR Nuget包依赖冲突

基本冲突.

SignalR希望Newtonsoft.Json版本4.0.7或更高版本,而RavenDB希望版本等于4.0.5.这显然意味着它们不能并排安装.

因此,除了从其中一个中下载源代码并获取本地的依赖关系然后必须检查从中创建的二进制文件,是否有可能保持使用NuGet管理的依赖项,并且可能只是转发DLL调用(像Mvc那样每个新版本都有)?

ravendb nuget signalr

10
推荐指数
2
解决办法
1104
查看次数

向当前客户端以外的组中的所有客户端发送消息

我想在服务器上的所有连接客户端上执行一个方法,当前客户端除外.没有我维护自己的clientids列表的任何方式吗?

TIA!

signalr

10
推荐指数
1
解决办法
3140
查看次数

SignalR:如何强制认证/终止集线器连接服务器端

这个问题与另一个线程有关,您可以在这里阅读:使用SignalR 进行表单身份验证,我在用户dfowler的帮助和耐心下尝试了解如何强制在SignalR Hub上形成ASP .NET Forms身份验证.

问题描述:我希望只有经过身份验证的用户才能连接SignalR Hub并接收/发送消息.

入侵场景:入侵者可以捕获/访问访问客户端计算机上临时文件的网页的HTML和Javascripts.因此,该入侵者可以知道建立/使用与Hub的连接所需的所有细节(方法,集线器名称等).dfowler提出的解决方案是实现IConnect:

您将实现IConnected并在Connect if(!Context.User.Identity.IsAuthenticated)中抛出以下代码抛出新的异常("GTFO");

所以我试着用这样的东西

  public System.Threading.Tasks.Task Connect()
    {
        if (!Context.User.Identity.IsAuthenticated
            || !(Context.User.IsInRole("role1") || Context.User.IsInRole("role2")
            ))
            throw new Exception("User not authorized");
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

一旦经过测试,问题在于,当调用Connect方法时,连接已经建立并且普通抛出异常将无济于事(如果我得到了正确的实际连接应该用于在连接时向客户端发送消息)抛出异常只会产生一条未发送的欢迎消息).

事实上,从我的测试中,客户端仍然可以读取所有消息(并发送它们).

现在,我想到的方法:

  1. 完美的解决方案:拒绝或终止服务器端的连接:不知道如何在SignalR中执行此操作(我试图在API中找到一个方法,但没有运气)
  2. 检查用户是否属于某个组以避免接收/发送消息给他(但这仍然容易发生洪水/ DOS攻击)
  3. 向客户端发送消息以断开连接:如果我正在与入侵者作战,显然无济于事.

还有其他方法吗?任何方式终止服务器端的连接或应该接受唯一真正的身份验证是主机网页之一(打开所有signalR客户端攻击的大门?)

编辑

以下是我使用IConnect.Connect无条件抛出异常的方法(浏览器IE9)时客户端 - 服务器通信的顺序:

Connect抛出异常时的客户端 - 服务器通信

它看起来像foreverFrame失败但是longPolling回退正在建立并且仍然有效 - 这是在抛出Javascript中捕获的错误之后

 if (connection.state === signalR.connectionState.connecting) {
            // Connection hasn't been started yet
            throw "SignalR: Connection has not …
Run Code Online (Sandbox Code Playgroud)

asp.net authentication signalr

10
推荐指数
1
解决办法
4166
查看次数

获取SignalR中心内的完整URL

我正在开发一个使用SignalR的用户跟踪解决方案,作为学习SignalR的有趣项目,用于ASP.NET MVC应用程序.

目前,我可以跟踪已记录的用户以及他们在特定页面上的时长.如果他们移动到另一个页面,我也跟踪它并且SignalR正在更新的计时器重置...许多其他功能被实现或部分实现.

我面临的问题是如何在SignalR集线器内获得完整的URL控制器/动作/参数?

当我使用HttpContext.Current.Request.Urlurl时总是/ signalr/connect.

注意:

var hub = $.connection.myHub;
$.connection.hub.start();
Run Code Online (Sandbox Code Playgroud)

在_Layout.cshtml中.

更新:

我试过用

var location = '@HttpContext.Current.Request.Url';
var hub = $.connection.myHub;
$.connection.hub.start().done(function () {
    hub.setLocation(location);
});
Run Code Online (Sandbox Code Playgroud)

并且位置正确传递但我不需要在Connect()任务上使用它.是否有可能做到这一点?

更新2:

这种方法不起作用

var hub = $.connection.myHub;
$.connection.hub.start(function(){hub.setLocation(location)});
Run Code Online (Sandbox Code Playgroud)

就像Connect()之前所说的那样.

在我的中心我有几种方法,但我想传递一个值(在我的情况下是一个位置)Connect(),这可能吗?

public class MyHub : Hub, IDisconnect, IConnected
{  
    public Task Connect()
    {
       //do stuff here
       //and i would like to have the **location** value
    } 

    public Task Disconnect()
    {
       //do stuff here            
    }             
} …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc-4 signalr signalr-hub

10
推荐指数
1
解决办法
6345
查看次数

SignalR js客户端似乎忽略了url端口

我正在尝试用SignalR组建一个简单的"Hello World"样式应用程序.稍微复杂的因素是SignalR集线器需要自托管,而不是IIS/ASP.NET.据我所知,我已经让服务器端正常工作,并且它可以在端口8080上使用,但我在连接客户端时遇到了麻烦.我目前遇到的问题是SignalR客户端似乎忽略了我指定的URL上的端口.

具体来说,我在这里有这个代码:

<head runat="server">
    <script type="text/javascript" src="/Scripts/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" src="/Scripts/json2.min.js"></script>
    <script type="text/javascript" src="/Scripts/jquery.signalR-0.5.3.js"></script>
    <script type="text/javascript" src="http://<%=Request.Url.Host %>:8080/signalr/hubs"></script>
    <title>SignalR Test</title>
</head>
<body>
    <script type="text/javascript">
        $(function () {

            // Wire up the client to the SignalR server on the same host 
            // as the source of this page, but on port 8080.
            $.connection.url = "http://<%=Request.Url.Host %>:8080/signalr";
            var roomHub = $.connection.roomHub;

            $('#echoButton').click(function () {
                roomHub.echo($('#echoButton').val())
                    .error(function (err) {
                        alert(err);
                    });
            });

            $.connection.hub.start({ transport: 'auto', xdomain: true })
                .done(function () {
                    console.log('Connected.');
                }) …
Run Code Online (Sandbox Code Playgroud)

javascript signalr signalr-hub

10
推荐指数
1
解决办法
8935
查看次数

SignalR性能计数器未在性能监视器中显示

我安装了Microsoft.AspNet.SignalR.Utils版本1.1.0.0,然后使用signalr.exe ipc安装性能计数器.

在"信号器"类别下的性能监视器中,我可以看到所有性能计数器,但它没有说明实例......所以如果我在监视器中添加其中一个计数器,它们就不会出现.

我的信号服务器服务器作为asp.net web api托管在IIS上.服务器和客户端都使用相同版本的信号器,即1.1.0.0.

任何的想法?

signalr

10
推荐指数
2
解决办法
3167
查看次数

SignalR连接冻结其他ajax请求

我使用基于SignalR(jquery.signalR-2.0.0-beta2.js)的实时消息系统开发了一个asp.net mvc应用程序.问题是SignalR连接启动后无法加载所有部分视图.在这种情况下,$ .connection.hub.start({transport:'longPolling'})之后的所有ajax请求.done(function(){applicationHub.server.connectUser();})保持挂起状态.是否可以将此请求设为异步,或者它是SignalR中的错误?谢谢你的帮助!

SignalR电话:

<script type="text/javascript">

    $(document).ajaxStop(function () {
        var applicationHub = $.connection.applicationHub;

        if ($.connection.hub && $.connection.hub.state == $.signalR.connectionState.disconnected) {

            registerConversationClientMethods(applicationHub);

            $.connection.hub.start({ transport: 'longPolling'}).done(function () {
                applicationHub.server.connectUser();
            })
            .fail(function () {

            });
        }
    });
</script>
Run Code Online (Sandbox Code Playgroud)

呈现局部视图的Ajax调用:

function LoadActivities(id,type,container,action,loaderpath){

var url = action + '/?id=' + id + '&type=' + type;
var targetDiv = container;
var ajaxLoading = "<img id='ajax-loader' src='" + loaderpath + "' height='6' width='50' style='margin:5px;'>";

$(targetDiv).html("<div align='center'>" + ajaxLoading + "</div>");

$.get(url, null, function (result) {
    $(targetDiv).html(result);
}); …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc jquery signalr

10
推荐指数
2
解决办法
3488
查看次数

C#5 .NET MVC长异步任务,进度报告和全局取消

我使用ASP.Net MVC 5,我有一个长期运行的动作,它必须轮询webservices,处理数据并将它们存储在数据库中.

为此,我想使用TPL库来启动任务异步.

但我想知道如何做三件事:

  • 我想报告这项任务的进展情况.为此,我想到了SignalR
  • 我希望能够离开我开始执行此任务的页面,并能够报告整个网站的进展(从左侧的面板,但这没关系)
  • 我希望能够全局取消此任务(从我左侧的面板)

我对所涉及的所有技术了解不少.但我不确定实现这一目标的最佳方法.

有人可以帮我解决最佳解决方案吗?

asp.net-mvc task-parallel-library c#-5.0 signalr

10
推荐指数
2
解决办法
6526
查看次数

将SignalR与Vue.js和Vuex集成

我们目前正在开发基于vue-cli webpack模板的投票应用程序.由于我们希望以一致且可维护的方式存储和操纵我们的投票状态,因此我们打算使用vuex进行状态管理.前端和后端之间的交互基于websockets,我们希望使用signalr,因为它在之前的项目中已被证明非常好.由于我们是vue.js的新手,我们需要一些建议如何将signalr,vuex和vue.js完美地集成在一起.

我们来描述一下这个场景:

前端从我们的后端获得一个事件来识别投票民意调查是否有效并且可以接收所选答案.一段时间后,我们通知前端结果可用并将其显示给用户.在某些情况下,我们可能会进行另一次投票.重要的是,我们能够在文档被隐藏时断开连接(页面可见性api).

我们的解决方案:

一般来说,我想为此目的实现一个特殊的signal.service.该服务负责建立连接以及通过websockets发送和接收消息.由于我们无法从公共模块对vuex存储执行任何更改,因此我们发现vuex插件是合适的.vuex插件应该包装signalr.

如果我们收到VotingStartEvent,我们将解锁相应的问题并将其显示给用户.如果用户回答了该问题,我们将此问题的新状态(已回答)提交给vuex商店.在我们的插件中,我们订阅了突变,我们将使用此订阅将我们的投票发送到后端.以下片段说明了这个想法:

var plugin = (store) => {
  // ...
  store.subscribe((mutation, state) => {
    console.log('inside subscription');
    // if vote has answered state, call connection.send() to submit the message to the backend
  });

  connection.received((message) => {
    // ...
    var event = parseEvent(message);
    if (event.type === START) {
      store.commit({type: 'voting', item: 'unlocked'});
    }
    // ...
  });
}
Run Code Online (Sandbox Code Playgroud)

这种方法是好的还是你认为还有改进的余地?

javascript signalr vue.js vuex

10
推荐指数
1
解决办法
8070
查看次数

SignalR - 发送消息OnConnected

我今天一直在尝试使用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)

c# asp.net signalr signalr-hub signalr.client

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