Лучший способ поймать исключение WCF в Silverlight?

Я использую плагин othree / html5.vim , который поддерживает css / javascript внутри html. Он работает, хотя это, вероятно, не самое простое решение.

Ваш код имеет такой отступ:



  
    
    
    
    
    
  
  
    

14
задан wahrhaft 19 September 2008 в 02:39
поделиться

6 ответов

Я проверяю, что свойство Error события args в сервисном методе завершило обработчик событий. У меня не было проблем с обработчиком событий, не позвонившись. В случае, где сервер понижается, вызов занимает несколько секунд, затем возвращается с ProtocolException в свойстве Error.

Принятие Вы попробовали это, и Ваш обратный вызов действительно никогда не называют, Вы могли бы изучить настройку сгенерированного прокси-класса. См. эта статья .

12
ответ дан 1 December 2019 в 13:48
поделиться

Я нашел поток форума , который говорил об этом, и он упоминает, что лучшая практика должна использовать свойство Error. Между этим потоком и моими собственными событиями, это - то, что я могу завершить:

  • В нормальном коде.NET, сгенерированный прокси-класс обрабатывает исключение правильно путем помещения исключения в свойство Error вместо того, чтобы бросить его.

  • В Silverlight, сгенерированный прокси-класс устанавливает свойство Error, но не обрабатывает исключение полностью. Исключение взято отладчиком, который открывается, поле исключения с сообщением "ProtocolException было не обработано пользовательским кодом". Несмотря на это сообщение, исключение, кажется, на самом деле не добирается до функции Application_UnhandledException.

я ожидал бы, что это - одна из вещей, которые они починят в финальной версии.

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

5
ответ дан 1 December 2019 в 13:48
поделиться

Можно забыть приблизительно [1 111] Application_UnhandledException относительно asyn клиентских обратных вызовов, причина почему:

Application_UnhandledException только исключения стреляли в поток UI, может быть пойман Приложением. UnhandledExceptions

Это означает... не зашедший все для асинхронного вызова WCF:-).

Проверка детализировала ответ от MSFT

http://silverlight.net/forums/t/21828.aspx

Привет, только исключения стреляли в поток UI, может быть пойман Приложением. UnhandledExceptions. Это не может поймать исключения из других потоков. Можно попробовать, это для беспокойства стреляет в проблему: В Visual Studio, из меню Debug, выбирают Exceptions. Тогда проверьте "Исключения Общеязыковой среды выполнения". Это заставит отладчик остановиться каждый раз, когда исключение выдается. Но обратите внимание, что это может быть довольно раздражающим иногда с тех пор, даже если исключение уже поймано. Можно использовать CheckBoxes для фильтрации исключений, которые Вы хотите поймать.

Хорошие новости в моем случае - то, что обработка сообщения об ошибке только в клиентском служебном вызове назад состоит достаточно в том, если Вы не отлаживаете.

Спасибо

Braulio
0
ответ дан 1 December 2019 в 13:48
поделиться

OOpps....

Жаль неправильный ответ с моей стороны (хорошо парень MSFT не поражал сервисные обратные вызовы ответа записи, называют на том же потоке UI), вещь

[еще 114] информация:

- In development even detaching from the debugger, this method is never reached. 
- On the production environment yes.

Мое предположение что-то имело отношение с опциями Visual Studio и исключениями прерывания.

[еще 116] информация, в этом потоке http://silverlight.net/forums/p/48613/186745.aspx#186745

Довольно интересная тема.

0
ответ дан 1 December 2019 в 13:48
поделиться

Я не сантехник, поэтому решил создать свой собственный класс службы WCF, который переопределяет некоторые функции файла класса reference.cs, который автоматически создается Visual Studio, Затем я добавил свои собственные блоки try / catch для выявления ошибок связи.

Созданный мной класс выглядит примерно так:

public class myWCFService : MyWCFServiceClient
{

    protected override MyController.MyService.IMyWCFService CreateChannel()
    {
        return new MyWCFServiceClientChannel(this);
    }

}

private class MyWCFServiceClientChannel : ChannelBase<MyController.MyService.IMyWCFService>, MyController.MyService.IMyWCFService
{
    /// <summary>
    /// Channel Constructor
    /// </summary>
    /// <param name="client"></param>
    public MyWCFServiceClientChannel(System.ServiceModel.ClientBase<MyController.MyService.IMyWCFService> client) :
    base(client)
    {
    }
    /// <summary>
    /// Begin Call To RegisterUser
    /// </summary>
    /// <param name="memberInformation"></param>
    /// <param name="callback"></param>
    /// <param name="asyncState"></param>
    /// <returns></returns>
    public System.IAsyncResult BeginRegisterUser(MyDataEntities.MembershipInformation memberInformation, System.AsyncCallback callback, object asyncState)
    {               
        object[] _args = new object[1];
        _args[0] = memberInformation;
        System.IAsyncResult _result = base.BeginInvoke("RegisterUser", _args, callback, asyncState);
        return _result;               
    }
    /// <summary>
    /// Result from RegisterUser
    /// </summary>
    /// <param name="result"></param>
    /// <returns></returns>
    public MyDataEntities.MembershipInformation EndRegisterUser(System.IAsyncResult result)
    {
        try
        {
            object[] _args = new object[0];
            MyDataEntities.MembershipInformation _result = ((MyDataEntities.MembershipInformation)(base.EndInvoke("RegisterUser", _args, result)));
            return _result;
        }
         catch (Exception ex)
        {
            MyDataEntities.MembershipInformation _result = new MyDataEntities.MembershipInformation();
            _result.ValidationInformation.HasErrors = true;
            _result.ValidationInformation.Message = ex.Message;
            return _result;
        }
    }
}
0
ответ дан 1 December 2019 в 13:48
поделиться

В Silverlight 3 отладчик Visual Studio перехватывает эти исключения, так что обработчик исключений ( сбивает с толку - никогда не достигается. Однако при запуске без отладчика обработчик исключений вызывается должным образом. Я думаю, что это нормально, если вы знаете об этом. Признаюсь, я потратил несколько часов, пытаясь выяснить, как углубиться во внутреннюю работу Silverlight/Wcf/Browser, чтобы добраться до моего исключения. Не ходите туда.

0
ответ дан 1 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: