Неизвестная ошибка с использованием API Digg и обработчика URI (Silverlight)
-
26-10-2019 - |
Вопрос
Для класса мы должны следовать учебному пособию, чтобы создать веб -сайт Silverlight, который ищет DIGG для данной темы. (Используя этот урок в качестве базы: http://weblogs.asp.net/scottgu/archive/2010/02/22/first-look-at-silverlight-2.aspx)
Мы должны использовать следующий код, чтобы получить информацию из Digg.
private void buttonSearch_Click(object sender, RoutedEventArgs e)
{
string topic = textboxSearchTopic.Text;
WebClient digg = new WebClient();
digg.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(digg_DownloadStringCompleted);
digg.DownloadStringAsync(
new Uri("http://services.digg.com/1.0/story.getAll?count=10&topic="+topic));
}
void digg_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
DisplayStories(e.Result);
}
}
private void DisplayStories(string xmlContent)
{
XDocument document = XDocument.Parse(xmlContent);
var stories = from story in document.Descendants("story")
where story.Element("thumbnail")!=null
select new DiggStory
{
Id = (string)story.Attribute("id"),
Title = (string)story.Element("title"),
Description = (string)story.Element("description"),
ThumbNail = (string)story.Element("thumbnail").Attribute("src"),
HrefLink = (string)story.Attribute("link"),
NumDiggs = (int)story.Attribute("diggs")
};
gridStories.ItemsSource = stories;
}
И при втуждении пуговица, мы получаем ошибку:
An exception occurred during the operation, making the result invalid. Check InnerException for exception details.
at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
at System.Net.OpenReadCompletedEventArgs.get_Result()
at DiggSample.Views.Search.Digg_OpenReadCompleted(Object sender, OpenReadCompletedEventArgs e)
at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)
at System.Net.WebClient.OpenReadOperationCompleted(Object arg)
Я уже знаю, что API Digg устарел, но я не думаю, что эта ошибка имеет к этому какое -либо отношение к этому. (Мы даже получаем локальный XML -файл, который мы можем использовать, но он все еще не работает)
Я понятия не имею, что вызывает это, и мы не получаем большой помощи от нашего учителя, поэтому я надеюсь, что кто -то сможет нам помочь.
Спасибо, Томас
Решение
Для этого раздела кода:
if (e.Error != null)
{
DisplayStories(e.Result);
}
Вы говорите, чтобы показать истории, если E.Error нет нулевой. Я думаю, вы хотите переключить условие, чтобы сказать e.Error == null
, как это будет означать, что ошибок не было и безопасно использовать результат. Вы можете поместить точку останова в условиях, чтобы осмотреть значение e.Error
Чтобы увидеть, есть ли у вас исключение там.
Редактировать:
Когда вы изменили состояние на e.Error == null
И ничего не произошло, это потому, что ошибка была не ноль, так что ваша DisplayStories(e.Result)
Заявление никогда не стреляло.
Исключение, о котором идет речь, SecurityException
, происходит потому, что Silverlight In-Browser Applications не позволяют вам звонить на внешние веб-сайты, если только этот веб-сайт не имеет файла политики Cross Domain Silverlight. К сожалению, файл политики Digg больше не допускает кросс-домен, что означает, что вы не сможете сделать этот вызов, если вы не запустите свое приложение с полным доверием вне браузера. Видеть Ограничение доступа к сети в Silverlight Больше подробностей.
Чтобы запустить ваше приложение в качестве приложения вне браузера с полным доверием, в Visual Studio щелкните правой кнопкой мыши свой проект и выберите свойства. На вкладке «Silverlight» установите этот флажок с надписью «Включить заканчивается браузер». Затем нажмите кнопку с надписью «Из настройки браузера». В диалоговом окне установите флажок «Требуйте повышенного доверия при работе за пределами браузера». На вкладке «Debug», для «Start Action», выберите «из приложения браузера» и выберите свой проект из выпадающего списка.
Когда вы запускаете этот путь, вы больше не должны получать Security Exception.