标签: signalr

Java客户端连接到SignalR?

我想从java客户端连接到SignalR服务器.那可能吗?

有没有人写过一个java-client连接到SignalR?

.net java signalr

32
推荐指数
2
解决办法
8720
查看次数

如何将SignalR用户连接id放在集线器类的旁边?

我在ASP.NET Web应用程序中使用SignalR.在这里,我将客户端从外部调用到集线器类使用IHubContext.我需要获取当前用户的连接ID,以便仅向当前用户发送消息.如何在客户端获取连接ID?

asp.net ajax signalr

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

SignalR不在服务器上使用Session

当我尝试HttpContext从HUB 访问当前会话时它返回null.

我尝试使用界面,IRequiresSession但它没有用.有人能帮我吗?

c# asp.net session-state signalr signalr-hub

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

SignalR:检测客户端上的连接状态

我已经看到了如何通过绑定到.disconnect事件来捕获客户端与SignalR的断开连接事件.

现在我已经完成了这个,我想让客户端进入"等待重新连接循环",它不断尝试连接,直到成功或用户取消.集线器是否公开连接状态属性?我在想(伪代码)

var isConnected;

function onConnected() { isConnected = true; }

hub.disconnect = function() { while(hub.notconnected) { connect(); }
Run Code Online (Sandbox Code Playgroud)

c# signalr

30
推荐指数
3
解决办法
4万
查看次数

SignalR与Web套接字

我试图让websockets在我的开发环境中工作:

  • Visual Studio 2010
  • Windows 7的
  • 信号R 0.51
  • 最新的Chrome/Firefox

不幸的是,Javscript客户端正在使用长轮询.当我在客户端强制使用Web套接字时,我根本无法连接:

$.connection.hub.start({ transport: ['webSockets'] })
Run Code Online (Sandbox Code Playgroud)

服务器代码是自托管的,基于示例,如下所示:

static void Main(string[] args)
{
    string url = "http://localhost:8081/";
    var server = new Server(url);

    // Map the default hub url (/signalr)
    server.MapHubs();

    // Start the server
    server.Start();

    Console.WriteLine("Server running on {0}", url);

    // Keep going until somebody hits 'x'
    while (true)
    {
        ConsoleKeyInfo ki = Console.ReadKey(true);
        if (ki.Key == ConsoleKey.X)
        {
            break;
        }
    }
}

public class MyHub : Hub
{            
    public void Send(string message) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net signalr

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

SignalR MVC 5 Websocket没有有效的凭据

我尝试在MVC应用程序中使用SignalR.它工作正常,但我在Chrome控制台中收到以下错误

 WebSocket connection to 'ws://localhost:18245/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=bNDGLnbSQThqY%2FSjo1bt
8%2FL45Xs22BDs2VcY8O7HIkJdDaUJ4ftIc54av%2BELjr27ekHUiTYWgFMfG6o7RaZwhf
fpXavzWQ1jvkaxGm5rI%2BWtK7j0g1eQC2aOYP366WmRQLXCiYJfsm4EbwX6T8n2Aw
%3D%3D&connectionData=%5B%7B%22name%22%3A%22importerhub%
22%7D%5D&tid=9' failed: HTTP Authentication failed; no valid credentials available 
Run Code Online (Sandbox Code Playgroud)

有趣的是,我通过Hub从Controller调用的jquery方法运行正常.

jQuery的:

 $(function () {
            // Initialize the connection to the server
            var importerHub = $.connection.importerHub;

            // Preparing a client side function
            // called sendMessage that will be called from the server side
            importerHub.client.sendMessage = function (message) {
                showOrUpdateSuccessMessage(message);
            };
            $.connection.hub.start();
        });
Run Code Online (Sandbox Code Playgroud)

控制器:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<ImporterHub>();
            hubContext.Clients.All.sendMessage("All operations complete");
Run Code Online (Sandbox Code Playgroud)

我使用.Net v4.5.1,SignalR v2.1.2.0和IIS 8.5与Windows身份验证.

我该如何解决这个错误?

asp.net-mvc jquery controller signalr owin

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

signalR - 获取用户名

我正在使用signalr和asp.net MVC3来构建示例聊天应用程序.这是我的信号器中心的样子

public class MyHub:Hub,IDisconnect
{
 public Task Join()
 {
  string username = HttpContext.Current.User.Identity.Name;
  //find group based on username
  string group = getGroup(username)
  return Groups.Add(Context.ConnectionId, group);
 }

 public void doStuff()
 {
  string group = getGroup();
  Clients[group].doStuffOnBrowser();
 }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我的应用程序在页面加载时崩溃了.在使用调试器时,我发现HttpContext.Current.User.Identity.Name为null,即使用户已经过身份验证.如何在Task Join()方法中获取用户名?

c# asp.net-mvc-3 signalr signalr-hub

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

SignalR:调用Hub方法"XXX"时出错

服务器:

public void AddLine(string line)
{
    Clients.Others.addLine(line);
}
Run Code Online (Sandbox Code Playgroud)

.NET客户端:

await rtHubProxy.Invoke("AddLine", "lineInfo");
Run Code Online (Sandbox Code Playgroud)

例外:

InvalidOperationException: There was an error invoking Hub method 'xxx.AddLine'.
Run Code Online (Sandbox Code Playgroud)

实际上,我试图用复杂的对象调用方法,只是为了找到异常.因此,我更改了参数的类型并将AddLine()体留空以进行调试,奇怪的是,它仍然抛出相同的异常.

我在客户端也有另一个SignalR调用,上面只有几行,响应性地运行而没有错误.相应的服务器端代码如下:

public void Hello(string text)
{
    Clients.All.hello(text);
}
Run Code Online (Sandbox Code Playgroud)

谁能找到我错在哪里?我已经调试了超过4个小时,即使在我简化代码后仍然无法找到撤消.

(严格检查拼写,没有不匹配.)

.net c# windows-8 windows-runtime signalr

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

SignalR OnDisconnected - 为聊天室处理"用户在线"的可靠方法?

我正在实施一个聊天室.到目前为止,这么好 - 用户可以通过JS客户端从他们的浏览器发送消息,我可以使用C#客户端做同样的事情 - 这些消息被广播给其他用户.现在,我正在尝试实施"在线用户".

我的方法如下:

  • OnConnected - 将数据库中的用户更新为IsOnline = true
  • OnDisconnected - 如果用户没有任何其他连接,请更新数据库中的用户 IsOnline = false
  • 我将状态存储在数据库中,因为无论如何我必须在数据库中查询用户缩略图 - 这似乎是在集线器中使用字典的简单替代方法.

我遇到的问题是OnDisconnected并不总是为每个客户端ID调用 - 过时的连接阻止"如果用户没有任何其他连接"位解析为true,那么用户总是"在线" ".

我能想到的一个hacky解决方案是始终在db中将用户设置为脱机OnDisconnect- 但这意味着如果用户打开两个选项卡并关闭一个选项卡,它们将"脱机".然后,我可以将用户重新设置为联机以获取发送的每条消息,但这似乎完全浪费了处理周期,并且仍然留下了一段时间,当用户真正在线时,用户被视为离线.

我相信,如果有办法保证为每个客户端调用OnDisconnected,这个问题就会消失.它看起来就像如果我离开的客户打开很长一段时间(> 10分钟),然后断开,OnDisconnected不会被调用.我会尽力确定repro步骤并保持更新.

那么 - 这是处理在线状态的有效方法吗?如果是这样,还有什么可以做的,以确保OnDisconnected最终为每个连接触发?

这个问题让我担心,因为现有的Connections会随着时间的推移而继续增长,如果我没有弄错的话,最终因为未处理的状态连接而溢出.

码:

我正在使用内存中的分组方法.

发送消息(C#):

private readonly static ConnectionMapping<string> _chatConnections =
            new ConnectionMapping<string>();
public void SendChatMessage(string key, ChatMessageViewModel message) {
            message.HtmlContent = _compiler.Transform(message.HtmlContent);
            foreach (var connectionId in _chatConnections.GetConnections(key)) {
                Clients.Client(connectionId).addChatMessage(JsonConvert.SerializeObject(message).SanitizeData());
            }
        }
Run Code Online (Sandbox Code Playgroud)

国家管理:

    public override Task …
Run Code Online (Sandbox Code Playgroud)

c# signalr signalr-hub signalr.client

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

SignalR + Autofac + OWIN:为什么GlobalHost.ConnectionManager.GetHubContext不起作用?

我正在尝试在单个项目中使用OWIN,SignalR和Autofac.

我正在设置有关signalR的内容如下:

       // Create the AutoFac container builder:
        var builder = new ContainerBuilder();

        // ...[Register various other things in here]...

        // register signalR Hubs
        builder.RegisterHubs(Assembly.GetExecutingAssembly());

        // Build the container:
        var container = builder.Build();

        // Configure SignalR with the dependency resolver.
        app.MapSignalR(new HubConfiguration
        {
            Resolver =  new AutofacDependencyResolver(container)
        });
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我使用Autofac SignalR集成时,我不能再在服务器上获取signalR Hub Context(例如在webapi控制器中),因此无法从服务器端向连接的客户端发送消息.当我不使用Autofac signalR集成时,如下所示:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.All.notification("Test Message");
Run Code Online (Sandbox Code Playgroud)

但是当我将Autofac添加到混合中时,这不起作用 - 我没有得到任何错误消息,我似乎得到了一个hubContext,但是对它的调用实际上似乎并没有到达客户端.

如果我在对MapSignalR的调用中注释掉了对signalR的依赖性解析器的使用,那么对GetHubContext的调用再次起作用并且消息成功地到达signalR客户端,但当然我不能再在我的集线器上使用IoC.例如

        // Configure SignalR with the dependency resolver.
        app.MapSignalR(new HubConfiguration
        {
            // Resolver =  new AutofacDependencyResolver(container)
        });
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么使用AutofacDependencyResolver会阻止GlobalHost.ConnectionManager.GetHubContext正常工作? …

asp.net autofac signalr owin

29
推荐指数
1
解决办法
7962
查看次数