Windows Phone 7 Silverlight using session

本文关键字:using session Silverlight Phone Windows | 更新日期: 2023-09-27 17:56:33

我正在创建一个Windows 7移动版Silverlight项目。我使用 Rest api 使用类进行身份验证,例如身份验证。我得到一个身份验证令牌作为响应,并将其分配给类属性 AuthToken,因为我需要在不同的地方使用它。有没有办法将此AuthToken存储在会话或其他任何东西中。因为我在 wp7 中没有找到任何会话示例。谢谢

Windows Phone 7 Silverlight using session

如果需要临时会话存储(应用的生命周期,包括用户使用后退按钮返回应用的时间),则可以使用"电话状态"。 电话状态类似于 ASP.NET 中的会话状态。它只是具有字符串键的(可序列化)对象的字典,不会在应用启动时进行维护,但在从后退堆栈导航到应用时会还原它。

下面是它用于还原名为 myObject 的自定义对象的示例:

private CustomObject myObject;
protected override void OnNavigatedFrom(NavigationEventArgs args)
{
    //Save to State when leaving the page
    PhoneApplicationService.Current.State["myObject"] = myObject;
    base.OnNavigatedFrom(args);
}
protected override void OnNavigatedTo(NavigationEventArgs args)
{
    if (PhoneApplicationService.Current.State.ContainsKey("myObject"))
    {
        //Restore from State
        myObject = (CustomObject)PhoneApplicationService.Current.State["myObject"];
    }
    else
    {
        //No previous object, so perform initialization
        myObject = new myObject();
    }
}

如果您需要在应用程序的所有实例中存储设置,请查看IsolatedStorageSettings,这是完美的选择。根据您的需求,还有其他选择(Charles Petzold 有一本免费的电子书,其中包含一些很好的例子)。


不知道为什么上面的代码对您不起作用,但另一种选择是使用隔离存储设置保存的应用程序属性。 下面是一个示例:

在 App.xaml 中.cs:

    public bool VibrationOn { get; set; }
    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        LoadSettings();
    }
    private void Application_Activated(object sender, ActivatedEventArgs e)
    {
        LoadSettings();
    }
    private void Application_Deactivated(object sender, DeactivatedEventArgs e)
    {
        SaveSettings();
    }
    private void Application_Closing(object sender, ClosingEventArgs e)
    {
        SaveSettings();
    }
    private void LoadSettings()
    {
        IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
        bool vo;
        if (settings.TryGetValue<bool>("VibrationOn", out vo))
            VibrationOn = vo;
        else
            VibrationOn = true;
    }
    private void SaveSettings()
    {
        IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
        settings["VibrationOn"] = VibrationOn;
    }

然后,可以使用以下代码在应用程序中的任何位置访问此属性:

    if (Application.Current.VibrationOn)
    {
        VibrateController.Default.Start(TimeSpan.FromMilliseconds(200));
    }

您没有找到任何会话示例,因为据我所知,WP7 没有会话。您应该能够使用独立存储来保留您的 AuthToken 。但是请记住,它不会像您对会话所期望的那样在一定时间后过期。

有关示例,请参阅以下内容或谷歌搜索独立存储:http://www.windowsphonegeek.com/tips/all-about-wp7-isolated-storage-store-data-in-isolatedstoragesettings

希望对您有所帮助。我没有做过很多WP7开发,但我熟悉Silverlight。

假设您只需要在当前应用程序实例的生存期内使用它:

最简单的答案是将其存储为静态属性而不是实例属性。

简单的答案是将其存储为应用程序类 (App.xaml.cs) 的属性。 然后,您可以使用((App)(Application.Current))在任何地方访问它。令 牌

不太简单但可能更好的答案是将其存储在 ViewModel 属性中,然后您可以通过 ViewModel 定位器访问该属性 - 例如查看 MVVM Light。

在所有这些情况下,你都需要考虑逻辑删除,以便在用户点击"开始"然后"返回"(例如)时还原它。