【问题标题】:SignalR Core not generating(mapping) Client methodsSignalR Core 未生成(映射)客户端方法
【发布时间】:2017-04-20 22:01:49
【问题描述】:

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

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

    }
}

sendMessage 方法应该包含在 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();

project.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(服务器)工作。

【问题讨论】:

标签: asp.net-core signalr


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多