Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WCF Fault Exception 
:(
    Опции темы
Freak_FB
Дата 25.10.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: нет
Всего: 4



Есть такая задача: пишу сайт, некоторые данные для которого заказчик предлагает брать через веб-сервис.
Беру студию, добавляю Service Reference по данному адресу, получаю класс-proxy.
Теперь нюанс: иногда они должны отправлять мне исключения в виде FaultException, а я их должен обрабатывать.
На деле получается, что WSDL схема предполагает генерацию исключений по определенным методам, и после генерации
прокси-классов генерируются обертки для исключений. А при запуске клиента эти исключения не отлавливаются.

Вот мой код:
Код

try
{
  var brands = client.GetBrands(guid, "CFUK");
  foreach (var brand in brands.Brands)
  {
    Console.WriteLine("Brand: Code={0}, Name={1}", brand.BrandCode, brand.Name);
  }
}
catch (FaultException<UnauthorisedAccessFault> ex)
{
  Console.WriteLine("Unauthorised. Check the guid");
  Console.WriteLine("Message is {0}", ex.Detail.Message);
}
catch (FaultException ex)
{
  Console.WriteLine("General fault");
}
catch (Exception ex)
{
  ShowExceptionInfo(ex);
}


Я намеренно передаю неверный GUID чтобы вызвать исключение UnauthorisedAccessFault на стороне сервера, и на стороне клиента его структурированно обработать.
На деле обработка исключение доходит аж до последнего блока.

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

P.S.: изменения на стороне сервера, как вы понимаете, исключены.


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
mihryak
Дата 25.10.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



IncludeExceptionDetailInFaults

надо этот атрибут указать классу, реализующему веб-сервис
как-то так
Код

    [ServiceBehavior(
        IncludeExceptionDetailInFaults = true,
        InstanceContextMode = InstanceContextMode.PerSession,
        ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class WebService :  IWebService

PM MAIL ICQ   Вверх
Freak_FB
Дата 25.10.2010, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: нет
Всего: 4



Я так понял это нужно указать на стороне сервера?
Я упоминал, что не могу повлиять на поведение сервера.

Может есть какой-то способ для клиента?


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
mihryak
Дата 25.10.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



нет, исключения идут от сервера, если он их не заворачивает в FaultException, то и на клиенте ничего не получить
PM MAIL ICQ   Вверх
Freak_FB
Дата 25.10.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: нет
Всего: 4



То есть если со стороны сервера я вижу в схеме WSDL что исключения к методам привязаны, и Add Service Reference добавляет классы для исключений, а они все равно не ловятся клиентом - что это может значить?


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
mihryak
Дата 25.10.2010, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



как-то я упустил, что на сервере они объявлены и на клиента приходят
IncludeExceptionDetailInFaults тут мимо

тогда, по-моему, единственной причиной может быть, что в контракте исключение FaultException<UnauthorisedAccessFault> объявлено, но сервер не кидает его в ответ на твой гуид
есть код сервера?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.