Я пытаюсь отправить объект с клиента на сервер, а затем с сервера на клиент (ы). Это использует пример кода, предоставленного Microsoft, который я немного изменил, чтобы использовать объект вместо примитива, код приведен ниже. Функция обратного вызова на клиенте никогда не вызывается после соединения connection.send от JS клиента.
Класс хаба
public class Chat : Hub
{
public void BroadcastMessage(MessageModel message)
{
Clients.All.SendAsync("broadcastMessage", message);
}
}
Класс модели
public class MessageModel
{
[JsonProperty("to")]
public string _to = "";
[JsonProperty("from")]
public string _from = "";
[JsonProperty("message")]
public string _message = "";
public MessageModel(string to, string from, string message)
{
_to = to;
_from = from;
_message = message;
}
}
Клиентская сторона JS (где, я думаю, проблема ...)
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@aspnet/signalr@1.0.0/dist/browser/signalr.min.js">
function onConnected(connection) {
console.log('connection started');
//connection.send('broadcastMessage', '_SYSTEM_', username + ' JOINED');
document.getElementById('sendmessage').addEventListener('click', function (event) {
// Call the broadcastMessage method on the hub.
if (messageInput.value) {
var msgObject = { to: 'Sally', from: 'Jonny', message: 'this is message' };
var myJSON = JSON.stringify(msgObject);
console.log(myJSON);
//neither object or stringify work
connection.send('broadcastMessage', msgObject);
}
// Clear text box and reset focus for next comment.
messageInput.value = '';
messageInput.focus();
event.preventDefault();
});
}
function bindConnectionMessage(connection)
{
var messageCallback = function (message)
{
console.log('Never hits here...');
if (!message) return;
// Html encode display name and message.
var encodedName = message.from;
var encodedMsg = message.message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
var messageEntry = createMessageEntry(encodedName, encodedMsg);
var messageBox = document.getElementById('messages');
messageBox.appendChild(messageEntry);
messageBox.scrollTop = messageBox.scrollHeight;
};
// Create a function that the hub can call to broadcast messages.
connection.on('broadcastMessage', messageCallback);
connection.on('echo', messageCallback);
connection.onclose(onConnectionError);
}
Я занимаюсь этим целую вечность и не могу понять, почему это так сложно. Я подозреваю, что это что-то действительно очевидное, но может действительно помочь. Спасибо!