标签: signalr

是否可以从 Postman 调用 SignalR Hub

我有一个带有 SignalR 集线器的 ASP .Net Core 2.2 Web API。是否可以使用 Postman 调用其方法之一(例如,SendMessageToAll)?问题是我只有 API - 没有前端 - 我需要测试。

我尝试将 URl 放到 Postman (api.mydomain.com/chatHub) 中的集线器,但后来我不确定如何构建主体。我知道 SignalR 最好使用 WebSockets,我不知道 PostMan 是否具有 WebSocket 功能。如果 WebSockets 不可用,我相信 SignalR 也可以执行 HTTP 请求,这是 Postman 可以做的。但我用的是什么身体?我是使用 HTTP GET 还是 POST?

我在 Postman 中看到有人在使用这个 body 的帖子:

{
    "Target": "SendMessageToGroup",
    "Arguments": [
        "groupA",
        "hello from server"
    ]
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试了相同的方法,但是当我在邮递员上单击“发送”时,我的集线器的 SendMessageToGroup 方法不会被触发。

在此处输入图片说明

谢谢

signalr signalr-hub signalr.client postman asp.net-core-webapi

19
推荐指数
3
解决办法
9780
查看次数

为 .NET 6 服务器项目安装哪个 SignalR 包?

我有一个 NET6 项目,它是更大的 .NET 6 ASP.NET 解决方案的一部分。该项目仍然引用:

  1. Microsoft.AspNetCore.SignalR,和
  2. Microsoft.AspNetCore.SignalR.Core

现在已被标记为已弃用。

我需要安装哪些软件包来替换它们?

问题在于,当前 SignalR 位于与主 ASP.NET 项目分开的程序集中。这是因为解决方案中的主项目和其他几个项目使用集线器(使用构造函数 DI)。

如果我将 SignalR 项目更改为

<Project Sdk="Microsoft.NET.Sdk.Web">
    ...
</Project>
Run Code Online (Sandbox Code Playgroud)

我收到以下编译错误:

错误 CS5001 程序不包含适合入口点的静态“Main”方法

所以问题是我无法与多个其他项目引用的 SignalR 建立一个通用程序集。

asp.net visual-studio signalr asp.net-core .net-6.0

19
推荐指数
1
解决办法
9137
查看次数

SignalR - 手动设置ClientID

我希望能够让各个用户使用SignalR相互发送消息,因此我需要发送到特定的客户端ID.如何在会话开始时为特定用户定义客户端ID - 比如用户的GUID主键?

signalr

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

Unittest SignalR Hubs

我想在SignalR中测试我的Hub,最好的方法是什么?

到目前为止我想到的可能的解决方案:

  • 创建一个可测试的Hub
  • 分离类的抽象逻辑
  • Selenium(想测试更小的单位)
  • 或者是一些SignalR测试功能被忽略了

目前使用SignalR 0.4和NUnit作为测试框架.

testing nunit unit-testing signalr

18
推荐指数
3
解决办法
8939
查看次数

SignalR异常记录?

这是两个问题,但是:

  1. 为我的Hub设置顶级异常处理程序的最佳方法是什么?目前版本的SignalR似乎不可能

  2. 当我在Hub中抛出错误时,为什么这在客户端上实际上没有做任何事情?

    $ .connection.hub.error(function(){return alert("test");});

当我调试时,我可以看到我的错误方法被连线,但是当我在Hub上抛出异常时,我可以看到从来没有尝试调用我在上面设置的方法.唯一发生的事情是SignalR将错误发送到控制台.

为了记录,我可以很好地连接其他事件

//Called during exceptions just fine 
$.connection.hub.received(function() {
  return alert("Received Data");
});

//Seems to do nothing?
$.connection.hub.error(function() {
  return alert("Received Exception");
});
Run Code Online (Sandbox Code Playgroud)

javascript signalr signalr-hub

18
推荐指数
1
解决办法
6365
查看次数

如何从SignalR消息接收返回值?

我从MVC Controller动作中调用SignalR

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
var ret = context.Clients.Client("Whatever").getValue(userId);
Run Code Online (Sandbox Code Playgroud)

无论如何我可以从动作中的客户端调用getValue()方法获得响应吗?

我尝试了几种方法,但根本无法获得任何ret值.我很确定这不适用于SignalR Hub但无法找到有关此内容的文档.

我考虑过的一个解决方案是在收到getValue之后客户端会在Hub中调用一个方法但是我不得不破解我从Hub获取响应到控制器的方法.

signalr

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

在start().done()之后SignalR并不总是准备就绪?

我有一个与SignalR合作的小项目,但是我得到了一些非常不一致的行为.

<script type="text/javascript">
    $(function () {
        var chat = $.connection.brewBattleHub;
        $.connection.hub.start().done(function () {
            $("#broadcast").click(function () {
                // Call the chat method on the server
                chat.server.roll($("#username").val(), $("#drinkname").val());
            });
            chat.server.sendMessage("SignalR loaded...");
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

当我加载页面时,有时我看到消息"SignalR loaded",有时我不是.

页面上还有一些其他功能,有时这也不起作用.如果我点击按钮并让事情发生,它最终会一次性完成......从这一点来说,这一切都是金色的,并且完美无缺.

start().done()?不确保一切准备就绪?

===附录,我没有引用jquery mobile(谷歌提到这样做时有一个错误)

asp.net signalr

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

SignalR中心构造函数何时被调用?

我正在尝试调试SignalR集线器,并注意到即使使用单个客户端,构造函数也会被多次调用.这是预期的行为吗?我期待构造函数只被调用一次用于类初始化,但我多次击中断点.

c# signalr signalr-hub

18
推荐指数
2
解决办法
6090
查看次数

实体框架"意外连接状态"例外

经过三个小时的调试和搜索,我希望有人在这里有答案.如果我连续快速调用以下函数(例如,相隔<0.1秒),实体框架(使用MySQL)会抛出以下异常.

System.InvalidOperationException:意外的连接状态.使用包装提供程序时,请确保在包装的DbConnection上实现StateChange事件.

但是,有时功能没有任何问题.第一次ToList()调用时抛出异常:

void InsertOrUpdateMaterials(List<Material> materials)
{
    var id = GetUserId();
    var materialIds = materials.Select(x => x.MaterialId).ToList();

    // Remove old materials from DB
    var oldMaterials = Db.Materials.Where(p => p.CreatedBy == id && 
            materialIds.Contains(p.MaterialId)).ToList(); // exception
    Db.Materials.RemoveRange(oldMaterials);
    Db.SaveChanges();

    // Replace previous materials with the new ones in list
    Db.Materials.AddRange(materials);
    Db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这个错误从未发生在开发服务器上,所以我调查了可能的配置问题无济于事.

有时,Entity Framework会抛出:

System.Data.Entity.Core.EntityCommandExecutionException:已经有一个与此Connection关联的打开DataReader,必须先关闭它.

再次指着ToList()电话.有任何想法吗?

c# entity-framework signalr

18
推荐指数
1
解决办法
9784
查看次数

AspNetCore.SignalR 2.1和CORS

我正在将SignalR-Service迁移到新的AspNetCore.SignalR(2.1预览版),现在我遇到了CORS的问题.我永远不会从同一个来源访问该服务,所以我需要一般禁用CORS.

我有以下的CORS政策

services.AddCors(
            options => options.AddPolicy("AllowCors",
                builder =>
                {
                    builder
                        .AllowAnyOrigin()
                        .AllowCredentials()
                        .AllowAnyHeader()
                        .AllowAnyMethod();
                })
        );
Run Code Online (Sandbox Code Playgroud)

(来自不同来源的我的WebApi-Controller呼叫在这些策略下工作正常)

使用SignalR for AspNetCore(AspNetCore.SignalR.Server)的旧预览包我没有任何问题,但现在,我的测试客户端得到了一些http-405,这似乎是CORS的一个问题.

SignalR可能有额外的CORS配置,还是我需要允许其他东西?

编辑:我创建了一个新的/干净的示例项目,没有任何特殊的中间件来检查如果错误发生在这里,它确实发生.

示例WebApplication | startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using WebApplication1.HUBs;

namespace WebApplication1
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(
                options => options.AddPolicy("AllowCors",
                    builder => …
Run Code Online (Sandbox Code Playgroud)

cors signalr asp.net-core

18
推荐指数
3
解决办法
7604
查看次数