0

我有一个简单的 Windows Phone 8 应用程序。当应用程序启动时,我需要对用户进行身份验证,进行服务器调用。在 InitializePhoneApplication() 中,我的 WP8 应用程序检查此数据是否已在之前的调用中获得并存储在 IsolatedStorage 中。如果隔离存储中没有数据,则执行服务器调用。代码:

if ((IsolatedStorageSettings.ApplicationSettings.Contains("loggedin")) && 
    (Convert.ToString(IsolatedStorageSettings.ApplicationSettings["loggedin"]).ToLower() == "y"))
{
    RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}
else
{
    SC = new ServiceClient();
    SC.CheckDeviceCompleted += SC_CheckDeviceCompleted;
    SC.CheckDeviceAsync(Utility.GetStatus());
}

这是 SC_CheckDeviceCompleted() 的代码。当 CheckDeviceAsync() 返回(在服务上)时引发此事件:

private void SC_CheckDeviceCompleted(object sender, CheckDeviceCompletedEventArgs e)
{
    string res = e.Result;
    if (!res.Equals(""))
    {
        IsolatedStorageSettings.ApplicationSettings["loggedin"] = "y";
        IsolatedStorageSettings.ApplicationSettings["id"] = res;
        RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
    }
    else
    {
        RootFrame.Navigate(new Uri("/Authentication.xaml", UriKind.Relative));
    }
}

从服务器接收的数据用于选择应用程序的起始页面。如果接收到空字符串,则服务器上没有注册任何数据:因此,用户必须登录。否则,用户可以立即访问应用程序的主页。

问题是这段代码不起作用。具体来说,没有收到来自服务的服务器调用(服务没有收到任何内容),因此永远不会执行 SC_CheckDeviceCompleted() 方法(因为没有收到来自服务的任何内容)并且不显示任何页面。

SC 实例在 App.xaml.cs 中定义为公共静态属性,App 类:

public static ServiceClient SC { get; set; }

从我的 WP8 应用程序的任何其他页面(我使用本地 ServiceClient 变量而不是 App.xaml.cs 中定义的 ServiceClient 属性)调用我的服务时,我的服务运行良好。我无法使用其中定义的 ServiceClient 属性从 App.xaml.cs 文件中进行服务调用。为什么?问题是什么?

4

1 回答 1

0

App.xaml 的主要目的是保存资源和页面的一些生命周期事件,例如应用程序的启动和退出。您不能在其中进行服务调用。只需在主页中使用相同的逻辑执行此操作即可。

于 2014-07-06T12:43:46.413 回答