我有一个简单的 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 文件中进行服务调用。为什么?问题是什么?