【问题标题】:SignalR Failure to invoke method in serverSignalR未能在服务器中调用方法
【发布时间】:2020-10-16 13:47:07
【问题描述】:

我正在构建一个带有 .net 核心 api 的 xamarin 应用程序。

我正在尝试通过 signalR 发送和接收消息以进行实时聊天。第一次用。

每当我尝试调用 SendMessage() 时,我都会得到:

failed to invoke  SendMessage()  due to an error on the server

这是我在 xamarin 客户端中的方法:

public partial class MessageForm : ContentPage
{
    private HubConnection hubConnection;

    public Command SendMessageCommand { get; }
    public Command ConnectCommand { get; }
    public Command DisconnectCommand { get; }

    public MessageForm(string name, object sender, System.EventArgs e)
    {
        InitializeComponent();
        Title = name;
        MessageEntry.Completed += StartMessage;
        SendMessageCommand = new Command(async () => { await SendMessage(sender, e); });
        ConnectCommand = new Command(async () => await Connect());
        DisconnectCommand = new Command(async () => await Disconnect());

        hubConnection = new HubConnectionBuilder()
            .WithUrl($"http://myAPIip/chatHub")
            .Build();

        hubConnection.On<string>("ReceiveMessage", message =>
        {
            //update UI 
        });


    }


    async Task Connect()
    {
        await hubConnection.StartAsync();

    }


    async Task Disconnect()
    {
        await hubConnection.StopAsync();

    }


    async Task SendMessage(object sender, System.EventArgs e)
    {

        await Connect(); 

        var model = new MessageViewModel
        {
            MessageContent = MessageEntry.Text,
            Receiver = Title,
            Sender = await SecureStorage.GetAsync("currentUser")
        };

        await hubConnection.InvokeAsync("SendMessage", model);
    }

    async void StartMessage(object sender, System.EventArgs e)
    {
        await SendMessage(sender, e); 
    }

}

}

我查看了现有帖子,最常见的原因是客户端中的方法名称不正确,与服务器不匹配

但是我在我的代码中没有看到任何问题,它们似乎都匹配,这是我的服务器端 chathub 代码:

public class ChatHub : Hub
{
    public async Task SendMessage(string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", message);
    }

}

除非我非常密集,否则一切看起来都是正确的!

这部分代码似乎没有命中,一旦尝试,我就会收到上述错误。

有什么想法吗?我显然错过了什么!

【问题讨论】:

  • 客户端正在发送 MessageViewModel 并且服务器需要一个字符串
  • 该死的!绝对是这样!非常感谢,我想我是因为睡眠不足!

标签: c# xamarin.forms signalr asp.net-core-webapi signalr-hub


【解决方案1】:

感谢@jason 指出客户端正在发送 MessageViewModel 并且服务器正在等待字符串

将我的代码更改为:

    public async Task SendMessage(Message message)
    {
        await Clients.All.SendAsync("ReceiveMessage", message);
    }

现在我应该去睡觉了,以免让自己感到尴尬:D

【讨论】:

  • 感谢您的分享,请不要忘记在两天后接受您的回答,它将帮助其他有类似问题的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多