【发布时间】: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