0

シンプルな Windows Phone 8 アプリケーションがあります。アプリが起動したら、サーバー呼び出しを行ってユーザーを認証する必要があります。私の WP8 アプリケーションは、InitializePhoneApplication() で、このデータが以前の呼び出しで既に取得され、IsolatedStorage に格納されているかどうかを確認します。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 プロパティとして定義されています。

public static ServiceClient SC { get; set; }

私のサービスは、WP8 アプリケーションの他のページ (App.xaml.cs で定義された ServiceClient プロパティではなく、ローカルの ServiceClient 変数を使用するページ) から呼び出されたときに完全に機能します。App.xaml.cs ファイルで定義されている ServiceClient プロパティを使用して、そのファイルからサービスを呼び出すことができません。なんで?何が問題ですか?

4

1 に答える 1

0

App.xaml の主な目的は、リソースと、アプリケーションの開始や終了などのページのライフタイム イベントを保持することです。その中でサービスコールを行うことはできません。同じロジックでメインページでそれを行うだけです。

于 2014-07-06T12:43:46.413 に答える