2011-05-13 3 views
1

Windows 7 모바일 Silverlight 프로젝트를 만들고 있습니다. 클래스를 사용하여 인증을 위해 나머지 API를 사용합니다. 인증이라고 말합니다. 나는 응답으로 인증 토큰을 얻었고 이것을 다른 장소에서 사용해야하기 때문에 클래스 속성 AuthToken에 할당했습니다. 이 AuthToken을 세션이나 다른 것으로 저장하는 방법이 있습니까? wp7에서 세션 예제를 찾지 못했기 때문입니다. 감사합니다.Windows Phone 7 세션을 사용하는 Silverlight

답변

2

내가 아는 한 WP7에 세션이 없기 때문에 세션 예제를 찾을 수 없습니다. 격리 저장소를 사용하여 AuthToken을 유지할 수 있어야합니다. 그러나 세션에서 기대하는 일정한 시간이 지나면 만료되지 않습니다. http://www.windowsphonegeek.com/tips/all-about-wp7-isolated-storage-store-data-in-isolatedstoragesettings

는 희망이 도움이 :

는 예는 다음이나 구글 검색 격리 된 저장소를 참조하십시오. WP7 개발은 많이하지 않았지만 Silverlight에 익숙합니다.

+0

을 암호.하지만 다른 클래스에서이 값을 얻으면 저장된 값이로드되지 않습니다 –

1

당신은 현재 응용 프로그램 인스턴스의 수명 동안 원하는 가정 :

가장 간단한 대답은 정적 속성 대신 인스턴스 속성으로 저장하는 것입니다.

간단히 대답하면 Application 클래스 (App.xaml.cs)의 속성으로 저장하는 것입니다. 토큰

덜 간단하지만 아마도 더 나은 대답은 ViewModel 속성에 저장하여 ViewModel 로케이터를 통해 액세스 할 수 있습니다. (예를 들어, (App) (Application.Current) 예를 들어 MVVM Light를 살펴보십시오.

이 모든 경우에 사용자가 시작과 그 다음에 (예를 들어) 뒤로 가면 다시 복원하기 위해 삭제 표시를 고려해야합니다.

5

임시 세션 저장 (사용자가 뒤로 버튼을 사용하여 앱으로 돌아갈 때를 포함하여 앱의 수명)을 원하면 전화 상태을 사용할 수 있습니다. 전화 상태는 ASP.NET의 세션 상태와 유사합니다. 그것은 문자열 키가있는 (직렬화 가능한) 객체의 사전이며 앱 실행을 통해 유지 관리되지 않지만 앱이 Back Stack에서 탐색 될 때 복원됩니다. 앱의 모든 인스턴스는 다음이 적합합니다 IsolatedStorageSettings 조사를 통해 설정을 저장해야하는 경우

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(); 
    } 
} 

: 그것은 일부 사용자 지정 개체의 이름 인 myObject를 복원하는 데 사용할 년대의 여기

은 예입니다. 필요에 따라 다른 옵션이 있습니다 ( Charles Petzold has a free eBook with some great examples).


위의 코드가 작동하지 않는 이유는 확실하지만 다른 옵션은 IsolatedStorageSettings를 사용하여 저장되는 앱 속성을 사용하는 것입니다. 당신의 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)); 
    } 
+0

위의 코드를 사용하고 있습니다. 하지만 다른 클래스에서이 값을 얻으면 저장된 값이로드되지 않습니다. 그것은 휴식 지점을 사용할 때만 작동합니다. –

+0

@Muhammad Zeeshan은 페이지 상태가 왜 작동하지 않는지 확실하지 않습니다. 제한된 방법으로 나에게 잘 해줬 다. 귀하의 상황에 맞는 작품을 찾을 수있는 예를 들어 답을 업데이트했습니다. 값이 만료되기를 원하면 datetime 객체를 저장하고'LoadSettings' 메소드에서 그것을 검사 할 수 있습니다. 또 다른 옵션은 애플리케이션 열기/닫기 이벤트에서'LoadSettings' /'SaveSettings' 메소드를 호출하지 않아 애플리케이션이 새로 시작될 때 기본값으로 돌아가도록합니다 (그러나 다시 상태로 유지합니다). – theChrisKent

+0

정말 고마워요. 응답을 위해. 나는 schummbo의 대답을 사용했다. 그것은 나의 상황에서 효과가 있었다. 나는 너를 투표했다. :) –