c# - 在我的 React 应用程序上实现 SignalR

标签 c# reactjs signalr

我阅读了各种教程并观看了视频,我尝试了所有这些,但似乎没有任何效果。

我的猜测是

<script src="/Scripts/jquery-1.10.2.min.js"></script> 
<script defer src="https://use.fontawesome.com/releases/v5.0.6/js/all.js</script> 
<script src = "/Scripts/jquery.signalR-2.3.0.min.js"></script> 
<!-- <script src="http://localhost:9092/signalr/hubs"></script> --> 
 <script src="~/signalr/hubs"></script>

代码行:

 <script src="~/signalr/hubs"></script> 

导致这个错误:

hubs:1 Uncaught SyntaxError: Unexpected token <

我试过用这个代替:

 <script src="http://localhost:9092/signalr/hubs"></script>

但问题是它看不到我的集线器。根据教程,他们说我必须能够导航到:

/signalr/hubs or /signalr/signalr/hubs

但顺便说一下,这两者都会让我进入 404 错误页面,这是我服务器上的代码:

启动.cs

            app.Map("/signalr", map =>
        {
            var hb = new HubConfiguration()
            {
                EnableJSONP = true,
                EnableJavaScriptProxies = true,
                EnableDetailedErrors = true
            };
            map.RunSignalR(hb);
        });
        app.MapSignalR();

并尝试在我的组件上访问它:

    componentDidMount() {

    var connection = $.hubConnection();
    // var hubConnection = connection.createHubProxy('Chat');

    connection.url = '~/signalr';
    connection.start({})
    .done(function (a) {
        console.log('================',a)
        console.log('Now connected, connection ID=' + connection.id);
        console.log(connection);
        console.log(connection.chatHub);
        //$.connection.chat.server.tachChatHub();
        connection.chatHub.server.tachChatHub();
    })
    .fail(function (e) { console.error('Could not connect ' + e); });
}

它说连接已建立,并给了我一个连接 ID。但是当我记录 connection.chatHub 时,它说未定义因此我无法触发内部功能......

这是集线器的代码:

    public class ChatHub : Hub
{
    public void TachChatHub(string name, string message)
    {
        Clients.All.addNewMessageToPage(name, message);
    }
}

对此有什么想法吗?我无法让它工作...

编辑:

经过大量研究,我发现在运行 signalR 之后应该创建一个名为“signalr”的文件夹,但它并没有在我的文件夹中创建。也许我在这里遗漏了一些东西......

最佳答案

修复了有关 Negotiate Made the connection start Like this 的问题:

   $.connection.hub.start({withCredentials:false})  
    .done(() => {
        console.log('Connected')
    })
    .fail((e) => { 
        console.log('Could not connect ' + e); 
    });

显然,我之前的 cors 设置阻止了它,因此我不需要将凭据传递给服务器,CORS 设置就可以挂接到之前的设置。

现在一切都按照我的预期工作:)

关于c# - 在我的 React 应用程序上实现 SignalR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52051716/

相关文章:

c# - Xamarin.Forms 使用 MVVM 在屏幕之间传输数据

reactjs - Emacs 中的样式化组件模式?

asp.net - 使用 signalr 定期向所有客户端发送消息

c# - Linux Web 服务器和 .NET 客户端应用程序之间的实时通信

c# - 内存泄漏问题 : how to dispose a SignalR hub connection and when to create a new connection

c# - 在 foreach 循环中更改对象值?

C#-WinForms ||用于旋转的图形的多个实例

javascript - 如何动态获取标签值并将来自不同输入的数字与 reactjs 相加

c# - 如何在用户仍在编辑 DataGridView 单元格时向他们显示错误?

javascript - ReactJS 重用模态来添加和编辑