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);
});