SignalR C#客户端未调用方法

时间:2019-02-13 16:33:01

标签: javascript c# asp.net-core signalr asp.net-core-2.1

我用SignalR和SQLTableDependency创建了一个服务器。之后,我使用Vue和SignalR Javascript Client创建了一个项目,并且一切正常,服务器中的通知订阅执行SignalR方法将对象发送给所有客户端

mkdir -p project1/{src,obj} project2/{src,obj}
touch project1/src/{fileA.c,fileB.c} project2/src/{fileX.c,fileY.c}

$ make
local_obj="project1/obj/fileA.o project1/obj/fileB.o"
local_obj="project2/obj/fileX.o project2/obj/fileY.o"
dep_all=" project1/src/fileA.c project1/src/fileB.c project1/obj/fileA.o project1/obj/fileB.o project2/src/fileX.c project2/src/fileY.c project2/obj/fileX.o project2/obj/fileY.o"
gcc -Lproject2/obj -c -o project1/obj/fileA.o project1/src/fileA.c
gcc -Lproject2/obj -c -o project1/obj/fileB.o project1/src/fileB.c
gcc -Lproject2/obj -c -o project2/obj/fileX.o project2/src/fileX.c
gcc -Lproject2/obj -c -o project2/obj/fileY.o project2/src/fileY.c

在JavaScript客户端中,我做到了:

private void Changed(object sender, RecordChangedEventArgs<Todo> eventArgs)
    {
        if(eventArgs.ChangeType != TableDependency.SqlClient.Base.Enums.ChangeType.None)
        {
            var changedEntity = eventArgs.Entity;
            var mensaje = TipoCambios(eventArgs);
            _hubContext.Clients.All.SendAsync("RegistrarTarea", changedEntity);
        }
    }

结果是这样的:

enter image description here

最后,我的C#客户端使用.Net Core 2.1。这不起作用

coneccionTodo.on("RegistrarTarea", todos => {
    this.$refs.alerta.Abrir(todos.cambio, "info", "Alerta");
    console.log(todos);
  });
  coneccionTodo
    .start()
    .then(response => {
      this.sinConexion = false;
    })
    .catch(error => {
      console.log("Error Todo SignalR", error.toString());
    });

public static async Task Ejecutar() { connection.On<List<dynamic>>("RegistrarTarea", (objects) => { Console.WriteLine(objects); }); try { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"Conexión exitosa a {url}"); await connection.StartAsync(); //await connection.InvokeAsync("RegistrarTarea", "Consola", true); } catch (Exception ex) { SignalR_Exception(ex); } } 控制台应用程序中,我调用void main方法:

Ejecutar

注意:在服务器中,CORS被激活以允许任何操作。

2 个答案:

答案 0 :(得分:2)

您是否使用直接模式?直接模式不适用于此功能。关闭直接模式。

答案 1 :(得分:0)

好吧,在connection.on中,我使用了一个列表,但取而代之的是,我使用了具有服务器发送等属性的Class。所以现在,它正在工作:

    connection.On<Result>("RegistrarTarea", (result) => {                
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine(result.Cambio);
    });

enter image description here