Windows phone 7, silverlight - Как перехватить EndpointNotFoundException при вызове асинхронного веб-сервиса? - PullRequest
6 голосов
/ 26 ноября 2010

Я звоню в веб-службу из приложения Silverlight для Windows Phone 7, которое прекрасно работает, если веб-служба доступна. Если веб-сервис недоступен, возникает необработанное исключение, но я, похоже, не могу его поймать сам. Моя попытка заключается в следующем:

            //Get list of providers from Webservice
        RSAServiceClient proxy = new RSAServiceClient();
        proxy.GetSuppliersCompleted += new System.EventHandler<GetSuppliersCompletedEventArgs>(ProxyGetSuppliersCompleted);
        try
        {
            proxy.GetSuppliersAsync();
        }
        catch (EndpointNotFoundException)
        {
            //TODO: Handle webserice not being available
        }
        catch (Exception)
        {
            throw;
        }

Но это не ловит исключение, и, очевидно, GetSuppliersCompleted никогда не вызывается, поэтому я не могу поймать его там.

Затем я подумал, что смогу обнаружить его, проверив состояние соединения (proxy.State), но, несмотря на то, что не запущенный веб-сервис возвращает CommunicationState.Opened.

Есть идеи, где я могу с этим справиться?

Извиняюсь, что что-то пропустил, но я искал и не нашел решения.

Ответы [ 3 ]

8 голосов
/ 26 ноября 2010

Вы должны поместить свой улов в ваш ProxyGetSuppliersCompleted метод.

Попытка получить доступ к результату приведет к ожидаемой ошибке.

В качестве альтернативы в ProxyGetSuppliersCompleted вы можете проверить свойство Error EventArgs, которое будет содержать исключение.

0 голосов
/ 14 декабря 2010

У меня точно такая же проблема. Поведение отличается от Desktop-Silverlight, где обрабатывается исключение, на WindowsPhone-Silverlight, где исключения подключения вообще не обрабатываются.

Я создал тему здесь: http://forums.create.msdn.com/forums/t/69485.aspx

Никто не имеет реального ответа. Ах, да, есть хитрость: вы можете вручную изменить reference.cs, чтобы вручную перехватить исключение .... Но если у вас много функций, это становится кошмаром.

Возможно, разработчики Microsoft не тестировали все варианты использования подключений, и они забывают реализовать этот (который является большим).

0 голосов
/ 27 ноября 2010

Я рекомендую проверить, есть ли у вас доступ к Интернету, прежде чем запускать код. Просто проверьте, есть ли сетевое соединение и сообщите пользователю, если нет.

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