0

最初のWP7アプリケーションはほぼ完成しており、マーケットプレイスに公開したいと思います。ただし、公開されたアプリの規定の1つは、使用中に予期せずクラッシュしてはならないということです。

私のアプリケーションはほぼ完全にWCFAzureサービスに依存しているため、ログイン、クライアントの追加/削除/編集/検索などの機能を実行するには、常にインターネットに接続する必要があります(ホストされているデータベースとの通信)。

インターネットに接続されていない場合、または使用中に接続が切断された場合、Webサービスを呼び出すとアプリケーションが終了します。どうすればこれを処理できますか?サービスへの接続の失敗がキャッチされ、例外を処理できると思いましたが、この方法では機能しません。

        LoginCommand = new RelayCommand(() =>
        {
            ApplicationBarHelper.UpdateBindingOnFocussedControl();
            MyTrainerReference.MyTrainerServiceClient service = new MyTrainerReference.MyTrainerServiceClient();

            // get list of clients from web service
            service.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(service_LoginCompleted);

            try
            {
                service.LoginAsync(Email, Password);
            }
            **catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }**
            service.CloseAsync();
        });

編集:

私の主な問題は、アプリケーションがクラッシュすることなく、WP7でEndpointNotFoundExceptionを処理する方法です。

ありがとう、

ジェラルド。

4

1 に答える 1

0

コードは次のようになります

LoginCommand = new RelayCommand(Login);
...

public void Login()
{
    var svc = new MyTrainerReference.MyTrainerServiceClient();
    try
    {
        svc.LoginCompleted += LoginCompleted;
        svc.LoginAsync();
    }
    catch (Exception e)
    {
        svc.CloseAsync();
        ShowError(e);
    }
}

private void LoginCompleted(object sender, LoginCompletedEventArgs e)
{
    ((MyTrainerReference.MyTrainerServiceClient)sender).LoginCompleted -= LoginCompleted;
    ((MyTrainerReference.MyTrainerServiceClient)sender).CloseAsync();

    if (e.Error == null && !e.Cancelled)
    {
        // TODO process e.Result
    }
    else if (!e.Cancelled)
    {
        ShowError(e.Error);
    }
}

private void ShowError(Exception e)
{
    // TODO show error
    MessageBox.Show(e.Message, "An error occured", MessageBoxButton.OK);
}

あなたのコードが呼び出しLoginAsyncてすぐにCloseAsync、これは問題を引き起こすと思います...

于 2012-04-09T21:43:11.387 に答える