gpt4 book ai didi

asp.net-core - SignalR Core 未生成(映射)客户端方法

转载 作者:行者123 更新时间:2023-12-04 02:29:06 24 4
gpt4 key购买 nike

SignalR Core 正在生成集线器代理脚本,但未添加“客户端”方法。 (服务器或客户端没有错误 - 只是不工作)

<script src="http://localhost/signalr/hubs"> 生成的 JS

proxies['messageHub'] = this.createHubProxy('messageHub'); 
proxies['messageHub'].client = { };
proxies['messageHub'].server = {
handleMessage: function (receivedString) {
return proxies['messageHub'].invoke.apply(proxies['messageHub'], $.merge(["HandleMessage"], $.makeArray(arguments)));
}
};

这是服务器端的集线器:
public class MessageHub : Hub
{
public void HandleMessage(string receivedString)
{
var responseString = string.Empty;

MessageHandler.HandleMessage(receivedString, ref responseString);

Clients.All.sendMessage(responseString);

}
}

发送消息 方法应包含在 JS 文件的 messageHub 客户端代理中。
$.connection.messageHub.client.sendMessage 未定义

只有 handleMessage 为服务器代理创建(并工作)。

这是我用于 SignalR 的 StartUp.cs 内容:

配置服务:
services.AddMvc(options =>
{
options.Filters.Add(new RoleFilterAttribute());
}).AddJsonOptions(options => options.SerializerSettings.ContractResolver =
new DefaultContractResolver());
services.AddSignalR(options => options.Hubs.EnableDetailedErrors = true)

配置:
app.UseWebSockets();
app.UseSignalR();

项目.json:
"Microsoft.AspNetCore.Mvc": "1.0.0-*",
"Microsoft.AspNetCore.WebSockets": "1.0.0",
"Microsoft.AspNetCore.SignalR.Server": "0.2.0-*",

一些额外的暂定:

1 - 在服务器端更改方法案例以查看它是否已映射:
Clients.All.SendMessage(responseString);

不工作!

2 - 将客户端更改为动态映射:
var connection = $.hubConnection('http://localhost/');
var proxy = connection.createHubProxy('messageHub');
connection.start({ withCredentials: false }).done(function () { console.log("CONNECTED") });
proxy.on("sendMessage", function (result) {console.log(result);});
proxy.invoke("handleMessage", msg).done(function(result)console.log(result);});

同样只有 handleMessage(服务器)工作。

最佳答案

好吧,根据文档,您缺少方法名称,因此发送所有行应如下所示

public void HandleMessage(string receivedString)
{
var responseString = string.Empty;

MessageHandler.HandleMessage(receivedString, ref responseString);

Clients.All.SendMessage("SendMessage",responseString);

}

另外在下面是正确的方法
app.UseSignalR(routes =>
{
routes.Hub<MessageHub>("/messageHub");
});

最后
    var connection = $.hubConnection('http://localhost/');
var proxy = connection.createHubProxy('messageHub');
connection.start({ withCredentials: false }).done(function () { console.log("CONNECTED") });
proxy.on("SendMessage", function (result) {console.log(result);});
proxy.invoke("HandleMessage", msg).done(function(result)console.log(result);});

关于asp.net-core - SignalR Core 未生成(映射)客户端方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40992412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com