Я пытаюсь реализовать некоторые вызовы SignalR для своего приложения WP 8.1, но у меня есть некоторые проблемы с методом On. Я могу подключиться к серверу, и я могу отправить данные на сервер через signalr с помощью метода Invoke. И я могу получить данные с сервера с помощью следующей команды:
Как я могу подписаться на событие SignalR On?
proxy.Subscribe("newTransaction").Received += newTransactionMethod;
async void newTransactionMethod(IList<Newtonsoft.Json.Linq.JToken> obj)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => { UpdateOutput2(obj[0]); });
}
void UpdateOutput2(dynamic data)
{
if (data != null)
{
NewTransaction nt = JsonConvert.DeserializeObject<NewTransaction>(data.ToString());
Output2.Text = "From: " + nt.fromName + " , To: " + nt.toName + " , Amount: " + nt.amount;
}
}
Но я хотел бы использовать метод On, а не подписаться, потому что рекомендуется и проще в использовании. Моя проблема в том, что когда я пытаюсь использовать метод On, он работает неправильно: я не получаю никаких данных с сервера. Вероятно, я не смогу его использовать.
Что я пробовал:
proxy.On<string>("newTransaction", data =>
{
Output2.Text = data;
});
Хорошо, я не использую JsonConvert в этом, но я могу сериализовать его после того, как я получаю данные.
Может ли кто-нибудь помочь мне решить мою проблему?
EDIT:
Вот полный код, возможно, он поможет разобраться с проблемой.
public sealed partial class SignalrPage : Page
{
HubConnection connection;
IHubProxy proxy;
public SignalrPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
SignalR1();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
public async void SignalR1()
{
try
{
connection = new HubConnection("https://***");
proxy = connection.CreateHubProxy("***Hub");
await connection.Start(new WebSocketTransport());
if (connection.State == Microsoft.AspNet.SignalR.Client.ConnectionState.Connected)
Output.Text = "Connected";
var s = await proxy.Invoke<LoginData>("RegisterDevice", new LoginData()
{
UserName = "***",
Password = "***",
DeviceId = "***",
DeviceType = 10
});
Output.Text = s.DeviceRegistered.ToString();
//If I uncomment the next line and comment the proxy.On method is it working. But in this case not.
//proxy.Subscribe("newTransaction").Received += newTransactionMethod;
proxy.On<string>("newTransaction", data =>
{
Output2.Text = data;
});
Output3.Text = "It should be subscribed to newTransaction";
}
catch (Exception e)
{
Output.Text = e.ToString();
}
}
async void newTransactionMethod(IList<Newtonsoft.Json.Linq.JToken> obj)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => { UpdateOutput2(obj[0]); });
}
void UpdateOutput2(dynamic data)
{
if (data != null)
{
NewTransaction nt = JsonConvert.DeserializeObject<NewTransaction>(data.ToString());
Output2.Text = "From: " + nt.fromName + " , To: " + nt.toName + " , Amount: " + nt.amount;
}
}
}
Is On вызывается, но данные пустые, или On вообще не вызывается? –
К сожалению, не вызывается. – Speederer