在WP8中使用SignalR时遇到困难

本文关键字:遇到 SignalR WP8 | 更新日期: 2023-09-27 18:30:47

我有一个Windows Phone 8客户端。

我正在使用 SignalR 与我的服务器通信。

我需要我的 UI 使用来自服务器的消息进行更新。

我知道服务器部分是正确的,因为我设置了断点并使用了 HTML5 客户端。

问题出在WP8上

以前从未使用过WP8,所以我不确定我是否正确。

我有这个:

    public MainPage()
    {
        this.InitializeComponent();
        this.NavigationCacheMode = NavigationCacheMode.Required;
          connection.Start().ContinueWith(task =>
        {
            if (task.IsFaulted)
            {
                UpdateConnectionState("Not Connected");            
            }
            else
            {
                UpdateConnectionState(string.Format("Success! Connected with client connection id {0}", connection.ConnectionId));
                hubuserid = connection.ConnectionId;
                //not important for now LogIn();
            }
        });
        connection.Received += data =>
        {
            UpdateConnectionState(data);
        };
        connection.Error += ex =>
        {
            UpdateConnectionState(string.Format("An error occurred {0}", ex.Message));
        };
        connection.Closed += () =>
        {
            UpdateConnectionState(string.Format("Connection with client id {0} closed", connection.ConnectionId));
        };
        connection.Reconnected += () =>
        {
            UpdateConnectionState("The connection was re-established");
        };
    }

我的 UI 最初声明已建立连接。

它现在正在接收我卡住的服务器的消息。 我也试过这个:

  private async void UpdateTime(string data)
    {
        await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
        {
            txtInfo.Text = data;
        });
    }
    public MainPage()
    {
        this.InitializeComponent();
        this.NavigationCacheMode = NavigationCacheMode.Required;
        proxy.On<string>("internetUpTime", UpdateTime);
        connection.Start().ContinueWith(task =>
        {
            if (task.IsFaulted)
            {
                UpdateConnectionState("Not Connected");            
            }
            else
            {
                UpdateConnectionState(string.Format("Success! Connected with client connection id {0}", connection.ConnectionId));
                hubuserid = connection.ConnectionId;
            }
        });
        //connection.Received += data =>
        //{
        //    UpdateConnectionState(data);
        //};
        connection.Error += ex =>
        {
            UpdateConnectionState(string.Format("An error occurred {0}", ex.Message));
        };
        connection.Closed += () =>
        {
            UpdateConnectionState(string.Format("Connection with client id {0} closed", connection.ConnectionId));
        };
        connection.Reconnected += () =>
        {
            UpdateConnectionState("The connection was re-established");
        };
    }

哪种方式是正确的,我的代码有什么问题?

谢谢

在WP8中使用SignalR时遇到困难

若要处理来自服务器的调用,请使用以下语法:

proxy.On<PckType>("broadcastMessage", msg => {});

其中PckType是等效于使用以下代码发送的类型服务器的类型:

Clients.Caller.broadcastMessage(pck);

SignalR 充当 RPC 服务,这意味着从客户端调用的方法必须存在于服务器上,反之亦然。当然,这仅适用于Hub方法。