Как остановить работу сервисов wcf в silverlight, когда происходит исключение - PullRequest
0 голосов
/ 19 июня 2010

После некоторого изучения обработки исключений в silverlight и чтения некоторых полезных блогов, подобных этому Обработка исключений Silverlight с использованием служб WCF RIA и служб WCF В итоге я реализовал аналогичную идею в файле App.xaml.cs, чтобы показатьстраницу ошибки и вызовите другой метод службы wcf, чтобы записать ошибку в программу просмотра событий:

 private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
    {
        if (!System.Diagnostics.Debugger.IsAttached)
        {
            var errorPage = new Error();
            errorPage.Show();

            string errorMsg = string.Format("{0} {1}", e.ExceptionObject.Message, e.ExceptionObject.StackTrace);
            EventHandler<WriteIntoEventLogCompletedEventArgs> callback = (s, ev) =>
            {
                bool result = ev.Result;
            };
            (new ServiceProxy<ApplicationServiceClient>()).CallService<WriteIntoEventLogCompletedEventArgs>(callback, errorMsg);

            e.Handled = true;
        }
    }

, и это то, что у меня есть в Error.xaml.cs:

 private void OKButton_Click(object sender, RoutedEventArgs e)
 {
        this.DialogResult = true;
 }

, что в основномзакроет страницу с ошибкой, когда пользователь нажмет OK.

В большинстве случаев все работает нормально. Проблема возникает, когда один из обратных вызовов к сервису wcf вызывает исключение. Страница ошибки будет хорошо отображаться, и когдапользователь нажимает ОК, страница ошибки закрывается.Но фон все еще показывает индикатор занятости, и исходный сервисный колбэк все еще ждет ответа. Мне нужно как-то прекратить его.

Я был бы признателен, если бы кто-нибудь мог помочь.

Спасибо, Sil

-

Большое спасибо за ваш полезный ответ. Я использовал ту же идею и в исходный метод обратного вызова службы добавил код для проверки e.Error и, если он не нулевойзакройте окно (это дочернее окно) с параметром busyindicator, и теперь все работает идеально.Еще раз спасибо.Sil

1 Ответ

0 голосов
/ 21 июня 2010

Я предполагаю, что исходный сервисный обратный вызов может быть завершен, но в состоянии ошибки. Возможно, вам придется обнаружить условие ошибки и установить для свойства IsBusy индикатора busyindicator значение False.

Пара вещей для проверки

  • Исходный обратный вызов службы по крайней мере успешно возвращается? Вы можете проверить это, поместив точку останова в исходный метод обратного вызова службы.

  • Правильно ли вы обработали условие ошибки в методе обратного вызова. Например -


void proxy_GetUserCompleted(object sender, GetUserCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            getUserResult.Text = "Error getting the user.";
        }
        else
        {
            getUserResult.Text = "User name: " + e.Result.Name + ", age: " + e.Result.Age + ", is member: " + e.Result.IsMember;
        }
    }

Ссылка - http://msdn.microsoft.com/en-us/library/cc197937(v=VS.95).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...