Gab*_*zun 11 signalr asp.net-core
SignalR Core正在生成Hub代理脚本,但不添加"客户端"方法.(服务器或客户端没有错误 - 只是不工作)
生成JS来自 <script src="http://localhost/signalr/hubs">
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)));
}
};
Run Code Online (Sandbox Code Playgroud)
这是服务器端的Hub:
public class MessageHub : Hub
{
public void HandleMessage(string receivedString)
{
var responseString = string.Empty;
MessageHandler.HandleMessage(receivedString, ref responseString);
Clients.All.sendMessage(responseString);
}
}
Run Code Online (Sandbox Code Playgroud)
该的sendMessage methos应包含在JS文件中messageHub客户端代理. $ .connection.messageHub.client.sendMessage未定义
仅创建了(并且正在工作)服务器代理的handleMessage.
这是SignalR的StartUp.cs包含:
ConfigureServices:
services.AddMvc(options =>
{
options.Filters.Add(new RoleFilterAttribute());
}).AddJsonOptions(options => options.SerializerSettings.ContractResolver =
new DefaultContractResolver());
services.AddSignalR(options => options.Hubs.EnableDetailedErrors = true)
Run Code Online (Sandbox Code Playgroud)
配置:
app.UseWebSockets();
app.UseSignalR();
Run Code Online (Sandbox Code Playgroud)
project.json:
"Microsoft.AspNetCore.Mvc": "1.0.0-*",
"Microsoft.AspNetCore.WebSockets": "1.0.0",
"Microsoft.AspNetCore.SignalR.Server": "0.2.0-*",
Run Code Online (Sandbox Code Playgroud)
一些额外的工作:
1 - 在服务器端更改方法案例以查看它是否已映射:
Clients.All.SendMessage(responseString);
Run Code Online (Sandbox Code Playgroud)
不工作!
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);});
Run Code Online (Sandbox Code Playgroud)
再次只有handleMessage(服务器)工作.
小智 0
好吧,根据文档,您缺少方法名称,因此发送所有行应该如下所示
public void HandleMessage(string receivedString)
{
var responseString = string.Empty;
MessageHandler.HandleMessage(receivedString, ref responseString);
Clients.All.SendMessage("SendMessage",responseString);
}
Run Code Online (Sandbox Code Playgroud)
下面也是正确的方法
app.UseSignalR(routes =>
{
routes.Hub<MessageHub>("/messageHub");
});
Run Code Online (Sandbox Code Playgroud)
最后
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);});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |