Silverlight и WCF: debugging или как понять ошибку сервиса
WPF, MVVM, Silverlight | создано: 21.02.2011 | опубликовано: 21.02.2011 | обновлено: 13.01.2024 | просмотров: 5248
Довольно часто при написании Silverlight-приложений с использованием WCF-сервисов (в том числе и RIA-сервисов) при запросе на сервер в ответ приходит сообщение типа: "The remote server returned an error: Not Found". И просто так понять о чем идет речь, или о чем сервер пытается намекнуть программисту просто невозможно. Я расскажу как решается проблема отладки.
Итак, хотелка
Хочу понимать присланные сервером сообщения об ошибках.
Включение отладки
Вариант 1:
Visual Studio имеет кучу настроек, не обошла команда разработчиков и такую важную тему как отладка (debugging). В настройках проекта сайта (host для silverlight-приложения) легко заметить закладку Web, в которой в самом низу можно найти раздел Debuggers.
Можно включить и выключить отладку Silverlight. Но стоит заметить, что Вы не сможете одновременно использовать отладку Silverlight и Host (сайт), на котором запускается silverlight-приложение, если Silverlight-приложение не браузере, а вне его (Out-Of-Browser OOB). В случаи OOB, одновременно можно отлаживать либо сайт (например, WCF-сервисы), либо Silverlight-приложение.
Вариант 2:
Можно запустить отладку использую полезную функцию Visual Studio, которая называется Attach to process (Ctrl+Alt+P). То есть подключится непосредственно к процессу (к браузеру) в котором исполняется silverlight-приложение:
Чтобы определить к какому экземпляру подключится можно посмотреть на тип: Type =Silverlight 86.
Конфигурация WCF-сервиса
В web.config надо тоже внести некоторые изменения. Они не большие но очень важные. Чтобы ваш сервис смог с вами "общаться" в файле конфигурации должна быть включена соответствующая настройка:
<serviceDebug includeExceptionDetailInFaults="true" />
Этот параметр, как можно понять из названия, разрешает отправку информации о полученных исключениях в результат запроса.
И, наконец, еще одна настройка
Чтобы Вы смогли получать сообщения на стороне silverlight-приложения, надо "сказать" приложению и в частности сервису, что все запросы к нему идут через http протокол. То есть, сделать так, чтобы сервис думал что его опрашивает web-сайт, а не silverlight. Для этого надо сделать следующее:
1) на странице, которая обращается к сервису (например, MainPage.xaml.cs) добавить пространства имен:
using System.Net; using System.Net.Browser;
2) в конструкторе этой самой страницы (например, MainPage.xaml.cs) написать код:
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
После отладки можно смело удалить эту строку. Она больше не понадобится. И, собственно говоря, на этом всё.
Дополнительно: