C# 在我的React应用程序上实现信号器

C# 在我的React应用程序上实现信号器,c#,reactjs,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

我读过各种教程并观看了视频,我尝试了所有教程,但似乎都不管用

我的怀疑是这样的

<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>
但是这两个都让我进入了404的错误页面,顺便说一下,我的服务器上的代码是:

Startup.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);
    }
}
有什么想法吗?我不能让它工作

编辑:


经过大量的研究,我发现在运行完之后,信号员应该创建一个名为“信号员”的文件夹,但在我的文件夹上却没有。可能我在这里遗漏了什么…

修复了有关协商的问题,使连接以如下方式启动:

   $.connection.hub.start({withCredentials:false})  
    .done(() => {
        console.log('Connected')
    })
    .fail((e) => { 
        console.log('Could not connect ' + e); 
    });
显然,我以前的cors设置正在阻止它,因此我不需要将凭证传递到服务器,以便cors设置连接到以前的设置


现在一切都如我所期望的那样工作:)

尝试从浏览器打开,看看它是否显示一个JSONOn js,您可以这样调用方法:
var proxy=connection.createHubProxy('Chat');invoke('TachChatHub',{name:'something here',message:'something other here'})我尝试过这样做:hubConnection.invoke('TachChatHub',{name:'something here',message:'something other here'});})并在后端设置一个断点,它不会被触发:'(我试过做locahost:9092/signal/negotiate,它抛出404=(这意味着你的服务器没有启动)
            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); });
}
    public class ChatHub : Hub
{
    public void TachChatHub(string name, string message)
    {
        Clients.All.addNewMessageToPage(name, message);
    }
}
   $.connection.hub.start({withCredentials:false})  
    .done(() => {
        console.log('Connected')
    })
    .fail((e) => { 
        console.log('Could not connect ' + e); 
    });