标签: signalr

使用SignalR和OWIN自托管的Windows身份验证

我有一个自托管SignalR应用程序使用OWIN.我想为传入的请求添加Windows身份验证.这可能吗?

我相信我可以通过类似的东西添加例如Forms Authentication .

但是我找不到任何方法来使用Windows身份验证来做类似的事情.

我的后备计划将是在IIS中托管,但我希望能够将我的应用程序保留为Windows服务,如果可以的话.

windows-authentication signalr owin

13
推荐指数
1
解决办法
6292
查看次数

在没有实体框架的情况下使用Breeze.js

我们正在尝试使用与John Papa的Pluralsight课程(例如,Web API,淘汰赛,jquery等)类似的技术和技术来开发SPA.但是,作为一家公司,我们决定不使用Entity Framework.我们想使用标准ADO.NET编写服务器端数据层.

现在,我们正试图将Breeze整合到我们的解决方案中.然而,即使Breeze网站说他们并没有与微软绑定,但是如果你不使用EF,你将会遇到与Breeze一起漫长而痛苦的旅程.

我们尝试评估NoDB Breeze示例,但是这个问题非常复杂且难以理解(并且弄清楚如何在服务器端的标准分层拱中实现它 - 一切看起来都是紧密耦合的,只是放在MVC/Web API项目的Models文件夹).

所以,我的问题是:

- 如果您不使用EF,Breeze是客户端数据库的错误选择吗?

- 如果Breeze可以很容易地在服务器端使用EF并且只使用直接的ADO.NET,那么是否有更好的示例或文档显示如何执行此操作?

- 鉴于我们的SPA实施非常类似于John Papa的SPA拱门,包括durandal,knockout,Web API等,除了(再次)我们没有使用EF,对我们来说有比Breeze更好的选择吗?

- 然后是SignalR ......我们计划稍后实施SignalR,Breeze是否可以与SignalR一起使用?

谢谢!

javascript entity-framework signalr single-page-application breeze

13
推荐指数
1
解决办法
4080
查看次数

SignalR:WebSocket握手期间出错:意外响应代码:400

我刚开始使用SignalR.我使用signalr在我的网站上实现了实时数据反射.当尝试连接web-socket时,控制台上出现"Web-Socket握手期间出错:意外响应代码:400"错误.

应用程序是使用Asp.net MVC开发的 - signalR 2.0.3,托管在Windows Server 2012 - IIS 8上

我从这个链接找到了一个解决方案

它说我们需要网站指向HTTPS(并利用SSL),然后http才能使用网络套接字.我的问题也解决了.我的疑问是 - 我们不能在不使用HTTPS的情况下解决这个问题?因为每个网站可能不需要在HTTPS上托管(这需要SSL).

websocket signalr

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

SignalR:在C#客户端中检测活动连接

我目前正在使用SignalR(2.1)Hubs开发一个应用程序.

我有一个WPF客户端,另一个是WCF客户端.一切都很好,因为他们完美地传递了信息.

我现在遇到的唯一问题是我注意到当应用程序因自动重启,WCF服务器故障以及其他一些原因而关闭时,OnDisconnected根本没有被触发.超时是默认值30秒.即使过了1天,我也从未打过电话(我试过).但是,超时适用于Web客户端.

它只在我调用hub.connection.stop()时才有效.

然而,当客户端是浏览器时,Ondisconnected方法非常有效.

因此,我想问一下Signal R Hub是否有办法检查客户端是否仍然连接或已经退出(例如ping)?

c# signalr

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

SignalR C#MVC将匿名用户映射到客户端ID

问题:如何管理匿名用户,以便在Hub发出响应时,单个浏览器中的多个选项卡都会更新?

方案如下:

我想将SignalR集成到一个项目中,以便匿名用户可以与运营商进行实时聊天.显然,使用iIdentity进行身份验证的用户通过Client.User(username)命令进行映射.但目前一位匿名用户正在浏览site.com/tools和site.com/notTools我无法仅使用connectionID向所有标签发送消息.只有一个选项卡收集响应.

我尝试过使用IWC补丁,但该工具不考虑将聊天信息保存到数据库中,我认为通过ajax传递变量并不是一种读取/写入数据库的安全方法.

我还查看了以下内容:管理匿名用户的SignalR连接

然而,创建一个这样的基础并使用会话似乎不如Owin安全.

我有想法通过每次用户连接时创建一个虚假帐户来使用client.user(),并在断开连接时将其删除.但我宁愿不用垃圾帐户填充我的aspnetusers数据库上下文似乎没必要.

是否可以使用UserHandler.ConnectedIds.Add(Context.ConnectionId);也映射假用户名?我不知所措.

使用iUserId提供商是否有意义?

public interface IUserIdProvider
{
    string GetUserId(IRequest request);
}
Run Code Online (Sandbox Code Playgroud)

然后创建一个数据库,将IP地址存储到connectionID和单个用户名?

数据库:

用户:使用FK连接ID

|userid|username|IP       |connectionIDs|
|   1  | user1  |127.0.0.1|  1          |
|   2  | user2  |127.0.0.2|  2          |
Run Code Online (Sandbox Code Playgroud)

connectionIDs:

|connectionID|SignalRID|connectionIDs|
|      1     | xx.x.x.x|     1       |
|      2     | xx.xxx.x|     2       |
|      3     | xx.xxxxx|     2       |
|      4     | xxxxx.xx|     2       |
Run Code Online (Sandbox Code Playgroud)

然后可能在连接周围编写逻辑?

public override Task OnConnected()
    {
     if(Context.Identity.UserName != null){
      //add a connection based on the …
Run Code Online (Sandbox Code Playgroud)

c# signalr asp.net-mvc-5

13
推荐指数
2
解决办法
1292
查看次数

SignalR - 部署到服务器时工作,但几小时后停止(MVC)

编辑:请查看此帖子的底部以获取更新.

我的SignalR实现在我的本地系统上完美运行.但是当我将它部署到我的服务器时,它似乎无法工作.它是一个MVC项目.

我的signalR jQuery如下:

var clientHub = $.connection.gamehub;

$(function () {

    var signalRHubInitialized = false;

    var image = $("#Ico");

    var count = 0;

    initializeSignalRHubStore();

    function initializeSignalRHubStore() {

        if (signalRHubInitialized)
            return;

        try {

            clientHub.client.broadcastMessage = function (message) {
                if (message === "Refresh")
                    reloadIndexPartial();
            };

            $.connection.hub.start().done(function () {
                clientHub.server.initialize($("#NotifierEntity").val());
                signalRHubInitialized = true;
            });

        } catch (err) {
            signalRHubInitialized = false;
        }
    };

    function reloadIndexPartial() {
        //$.post('@(Url.Action("LivePartial", "Scrim", null, Request.Url.Scheme))')
        var id = $("#SeriesDetail_Id").val();
        $.post('/Scrim/LivePartial/' + id)
            .done(function (response) {
                try {
                    count …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc jquery signalr

13
推荐指数
1
解决办法
1088
查看次数

ASP.NET Core SignalR中的客户端生命周期事件

我目前正在将一个项目从ASP.NET SignalR 2.2.3(OWIN)升级到ASP.NET Core SignalR 1.0.2(Kestrel).

SignalR 2.2.3支持多个客户双面一生的事件一样reconnecting,connectionSlow,stateChanged,....我们的javascript客户端使用这些事件并显示类似"重新连接"或"连接当前很慢"的内容.

是否存在或将存在ASP.NET Core SignalR中的等价物?到目前为止我只发现了两个终生事件:

let c = new signalR.HubConnectionBuilder().("/signalR");
c.connection.onClose(function(error) {});
c.connection.onReceive(function(data) {});
Run Code Online (Sandbox Code Playgroud)

我也看到了这个问题,但用户只询问了这个onClose事件.

不,我不是在寻找服务器端的终身事件.

更新 - 重新连接事件

好吧,因为根据文档和这个Github问题,没有重新连接(但是?),我对丢失Reconnecting和没有问题Reconnected.可是你知道connectionSlow,startingstateChanged

javascript signalr signalr.client asp.net-core asp.net-core-signalr

13
推荐指数
1
解决办法
1060
查看次数

.NET 中 SignalR 有哪些替代方案?

我们在我们的应用程序中使用 SignalR,但我们遇到了一些问题,例如调用失败和连接不一致。所以我想知道是否有一个很好的替代 SignalR 可以与 .NET 一起使用。例如,socket.io 会是一个不错的选择吗?

asp.net asp.net-mvc socket.io signalr

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

自 Chrome 88 以来的 SignalR 和/或计时器问题

我们有一个 ASP.Net WebForms 应用程序,它使用 SignalR (v2.4.1) 在服务器和客户端之间进行一些双向通信。多年来一直运行良好:连接稳定,数百名用户使用它,等等。

但是,我们已经开始从我们的客户群中收到有关连接问题的零星报告,所有报告都报告相同的事情:如果浏览器 (Chrome) 会话闲置超过 5 分钟,则连接在后台断开。页面中的所有计时器都停止定期运行,这(除其他外)停止发送“keepalive”,最终连接失败并出现客户端错误:

The client has been inactive since <date> and it has exceeded the inactivity timeout of 50000 ms. Stopping the connection.
Run Code Online (Sandbox Code Playgroud)

此后的标准程序是自动重新启动连接,但这不会做任何事情。如果/当用户重新激活页面(例如通过切换到选项卡),一切都开始恢复活力,尽管 SignalR 连接已关闭。

经过大量调查,我们似乎受到了Chrome v88 中引入的这一更改的影响,其中计时器 ( setTimeouts) 受到严格限制,如果

  • 该页面已隐藏超过 5 分钟
  • 计时器已经“链接”了 5 次或更多次 - 我假设这类似于递归,计时器调用自身。
  • 页面已经“沉默”了 30 秒

5 分钟/30 秒的条件与我们得到的报告相符。然而,我们在我们的页面上运行非常基本的 Javascript:setTimeout在我们自己的代码中只有两种用法,它们都不能“链接”(递归)到自己身上。我们也不能复制的问题:这是发生在我们的测试,但我们不能这发生可靠。通过禁用此功能chrome://flags/#intensive-wake-up-throttling似乎可以缓解该问题 - 但当然,我们不能将其作为使用我们网站的要求。

该站点上唯一运行的其他 Javascript 是jquery.signalR-2.4.1.js,并且从 SignalR 源代码中可以看出,其中有很多setTimeouts。SignalR 是否会受到 Chrome 中这一变化的影响;也许是在临时网络问题或其他一些不可预测的事件后尝试以静默方式重新连接时?

如果没有,是否有任何方法可以在任何浏览器或 …

javascript google-chrome timer signalr

13
推荐指数
1
解决办法
3187
查看次数

将多个客户端从同一主机连接到信号服务器块

作为我教育项目的一部分,我正在测试几种.net实时通信方法.其中一个是信号灯.出于这个原因,我有两个程序:

  • ServerHostApp-具有Microsoft.AspNet.SignalR.Hosting.Self.Server的WPF应用程序,它公开单个Hub.
  • ClientHostApp-托管许多信号器客户端的WPF应用程序

这些程序的典型工作流程是:启动服务器 - >使用ClientHostApp-> run tests连接一些客户端.

如果程序同时托管在同一台计算机上,但如果尝试在不同的计算机上运行程序,则会出现问题.特别是,我无法从单个ClientHostApp实例连接多个客户端.

服务器代码:

 //starting up the server
public override void Start()
{
  string url = "http://*:9523/MessagingServiceHostWPF/";
  Server = new SignalR.Hosting.Self.Server(url);
  Server.MapHubs();
  Server.Start();
}
Run Code Online (Sandbox Code Playgroud)

...

//one of the methods inside the hub exposed by the server
    public DataContracts.ClientInfo AcknowledgeConnection(string handle)
    {
       ServerLogic.DataContracts.ClientInfo clientInfo = SignalRApplicationState.SingletonInstance.AddClient(handle, Context.ConnectionId);;
       return clientInfo;
     }
Run Code Online (Sandbox Code Playgroud)

ClientHostApp:

//starting many clients in a loop
foreach (var client in _clients)
{
  client.Start();
}
Run Code Online (Sandbox Code Playgroud)

...

//method inside the Client class
public async void Start() …
Run Code Online (Sandbox Code Playgroud)

.net real-time signalr

12
推荐指数
1
解决办法
2403
查看次数