Obsługa wyjątków usługi WCF

0

Witam,

Pytanie dotyczy aplikacji Windows Phone 8.1 Silverlight która korzysta z napisanej przeze mnie usługi WCF do łączenia i pobierania informacji z bazy danych. Chodzi mi o to, w jaki sposób obsłużyć wyjątek błędu komunikacji z bazą danych? Przypuśćmy, że usługa jest włączona i mamy do niej dostęp, natomiast usługa nie ma dostępu do bazy danych z jakiegoś powodu. Czy taka obsługa błędu powinna znajdować się po stronie WCFa?

Druga sprawa: postanowiłem sobie zasymulować brak dostępu do usługi WCF. Zmieniłem w tym celu po prostu adres IP do usługi. Chcę ten wyjątek obsłużyć z poziomu aplikacji. Jednak jakkolwiek bym się nie starał, to i tak wywala mi błąd Visual Studio. Doradzi ktoś jaka klasa błędu jest odpowiedzialna za obsługę błędu komunikacji z usługą?

Próbuję coś takiego:

public partial class Kurs : PhoneApplicationPage
    {
        CenyMiejscaService.CenyMiejscaServiceClient cenyMiejscaUsluga;
        Dictionary<DateTime, double> kurs;

        public Kurs()
        {
            InitializeComponent();

            kurs = new Dictionary<DateTime, double>();

            try
            {
                cenyMiejscaUsluga = new CenyMiejscaService.CenyMiejscaServiceClient();
                cenyMiejscaUsluga.PobierzKursRublaCompleted += cenyMiejscaUsluga_PobierzKursRublaCompleted;

                cenyMiejscaUsluga.PobierzKursRublaAsync();
            }
            catch(CommunicationException ex) // Próbowałem różne Exceptiony
            {
                MessageBox.Show(ex.Message);
            }
        }

To ciągle mnie wywala i dostaję komunikat w pliku Reference.cs:

BladPNG_wrensxr.png

EDIT: Czyli krótko mówiąc, chciałbym zapobiec wysypywaniu się aplikacji w momencie, gdy z jakiegoś powodu nie ma dostępu do usługi WCF.

0

Obsługujesz CommunicationException.
Dodaj obsługę innych, np.: EndpointNotFoundException

Na koniec obsługi wyjątków, w najwyższej warstwie, zawsze obsługuj typ Exception

0

Do obsługi wyjątków z WCF użyj Fault Exceptions
http://msdn.microsoft.com/en-us/library/ee942778.aspx

0

Hmm... nie zauważyłem asynchronicznego uruchomienia:)
Błąd powinien być w parametrze metody cenyMiejscaUsluga_PobierzKursRublaCompleted

0

Właśnie chodzi o to że te uruchomienie jest asynchroniczne i zanim wyjątek nastąpi to blok try się już skończy ;) Do metody cenyMiejscaUsluga_PobierzKursRublaCompleted nawet nie dochodzi, próbowałem już.

0

Hmm... "u mnie działa" :)
Event handler jest wywoływany. Co to znaczy "Jednak jakkolwiek bym się nie starał, to i tak wywala mi błąd Visual Studio" ??

0
gosc_z_pytaniem napisał(a):

Co to znaczy "Jednak jakkolwiek bym się nie starał, to i tak wywala mi błąd Visual Studio" ??

Może źle napisałem. Chodzi o to, że .NET wyrzuca mi wyjątek taki jak na screenie załączonym w tamtym poście. A "... jakkolwiek bym się nie starał..." to miałem na myśli try-catch blok :D

gosc_z_pytaniem napisał(a):

Hmm... "u mnie działa" :) Event handler jest wywoływany.

Oho, zasymulowałeś błąd połączenia z usługą błędnym adresem do usługi? Mi nie wchodzi w tego eventa w ogóle tylko wywala błąd jak na screenie tamtym.

0

Nie zauważyłem załącznika, ale jeżeli w VS klikniesz F5 to handler jest wywoływany, prawda?

0

No właśnie nie, w momencie jak zmieniam adres dostępu do usługi to ten event handler nie jest wykonywany, wcześniej wywala błąd ten co na screenie. Gdy robię breakpointa to przechodzi przez cały blok try i wykrzacza w tym EndPobierzKursRubla w pliku Reference.cs, który to kod generuje Silverlight automatycznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0