2012-04-09 4 views
0

Я почти закончил свое первое приложение WP7, и я хотел бы опубликовать его на рынке. Тем не менее, одним из условий для опубликованного приложения является то, что он не должен неожиданно вылетать во время использования.обработка приложения, требующего веб-службы - работа с EndpointNotFoundExceptions

Мое приложение почти полностью зависит от службы WCF Azure - поэтому я должен постоянно подключаться к Интернету, чтобы мои функции работали (общались с размещенной базой данных) - включая логин, добавление/удаление/редактирование/поиск клиентов и так далее.

Если вы не подключены к Интернету или когда соединение падает во время использования, вызов веб-службы приведет к завершению работы приложения. Как я могу справиться с этим? Я решил, что отказ от подключения к службе будет пойман, и я мог бы справиться с этим исключением, но это не работает.

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

EDIT:

Моя главная проблема заключается в том, чтобы справиться с EndpointNotFoundException в WP7 без сбою приложения.

Thanks,

Gerard.

ответ

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, я думаю, что это вызовет проблемы ...

+0

Большое спасибо за советы. Я собираюсь переформулировать вопрос, чтобы спросить, как обращаться с EndpointNotFoundExceptions. – renegade442

+0

Если вы используете мой код, это исключение также будет обрабатываться и отображаться ... Я не вижу вашей проблемы ... –

+0

На самом деле, я не продолжал пропущенную ошибку Reference.cs, работая сейчас. Еще раз спасибо! – renegade442