Я застрял на этих выходных и с треском провалился!
Пожалуйста, помогите мне вернуть себе рассудок !!
Ваша задача
Я подумал, что для моего первого приложения Silverlight было бы интересно использовать арсенал World of Warcraft для составления списка персонажей моей гильдии. Это предполагает создание асинхронного перехода от Silverlight (да!) К арсеналу WoW, основанному на XML. ПРОСТО ЭХ?
Взгляните на эту ссылку и откройте исходный код. Вы поймете, что я имею в виду: http://eu.wowarmory.com/guild-info.xml?r=Eonar&n=Gifted и талантливые
Ниже приведен код для получения XML (вызов ShowGuildies справится с возвращенным XML - я протестировал это локально и знаю, что это работает).
Мне вообще не удалось получить ожидаемый возвращенный XML.
Примечания:
- Если браузер способен преобразовывать XML, он это сделает, в противном случае будет предоставлен HTML. Думаю, он проверяет UserAgent
- Я опытный веб-разработчик asp.net на C #, так что не торопитесь, если вы начнете говорить о нативном для Windows Forms / WPF
- Кажется, я не могу установить параметр UserAgent в .net 4.0 - по какой-то причине это не похоже на свойство объекта HttpWebRequest - я думаю, что раньше он был доступен.
- Silverlight 4.0 (изначально был создан как 3.0 до того, как я обновил свою установку Silverlight до 4.0)
- Создано с использованием C # 4.0
- Пожалуйста, объясните, как будто вы разговариваете с веб-разработчиком, а не с профессиональным программистом, лол!
Ниже приведен код - он должен вернуть XML из арсенала wow.
private void button7_Click(object sender, RoutedEventArgs e)
{
// URL for armoury lookup
string url = @"http://eu.wowarmory.com/guild-info.xml?r=Eonar&n=Gifted and Talented";
// Create the web request
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
// Set the user agent so we are returned XML and not HTML
//httpWebRequest.Headers["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";
// Not sure about this dispatcher thing - it's late so i have started to guess.
Dispatcher.BeginInvoke(delegate()
{
// Call asyncronously
IAsyncResult asyncResult = httpWebRequest.BeginGetResponse(ReqCallback, httpWebRequest);
// End the response and use the result
using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.EndGetResponse(asyncResult))
{
// Load an XML document from a stream
XDocument x = XDocument.Load(httpWebResponse.GetResponseStream());
// Basic function that will use LINQ to XML to get the list of characters.
ShowGuildies(x);
}
});
}
private void ReqCallback(IAsyncResult asynchronousResult)
{
// Not sure what to do here - maybe update the interface?
}
Очень надеюсь, что кто-нибудь сможет мне помочь!
Спасибо, мучо! Дэн.
PS Да, заметил иронию в названии гильдии :)