Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 HttpGetClientProtocol  [new]
.NET
Member

Откуда: Москва->Петушки
Сообщений: 8258
Хочу получить XML с помощью HttpGetClientProtocol метода Invoke.
Выдаёт ошибку, типа полученный результат не является XML.
Сохраняю на свой комп, загружаю с локалхоста - всё нормально.
Урл ресурса сто раз уже проверил. В чём дело, подскажите пожалуйста.
21 ноя 07, 12:14    [4944077]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
Java Programmer
Member

Откуда: Moscow
Сообщений: 919
.NET
Хочу получить XML с помощью HttpGetClientProtocol метода Invoke.
Выдаёт ошибку, типа полученный результат не является XML.
Сохраняю на свой комп, загружаю с локалхоста - всё нормально.
Урл ресурса сто раз уже проверил. В чём дело, подскажите пожалуйста.


XML в студию
21 ноя 07, 12:49    [4944405]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
.NET
Member

Откуда: Москва->Петушки
Сообщений: 8258
<?xml version="1.0"?>
<CRates>
<Date>20071121</Date>
<Currencies>
<Currency>
<ID>AED</ID>
<Units>1</Units>
<Rate>0.13000000</Rate>
</Currency>
<Currency>
<ID>AUD</ID>
<Units>1</Units>
<Rate>0.42400000</Rate>
</Currency>
<Currency>
<ID>BGN</ID>
<Units>1</Units>
<Rate>0.35900000</Rate>
</Currency>
<Currency>
<ID>BYR</ID>
<Units>1000</Units>
<Rate>0.22200000</Rate>
</Currency>
<Currency>
<ID>CAD</ID>
<Units>1</Units>
<Rate>0.48800000</Rate>
</Currency>
<Currency>
<ID>CHF</ID>
<Units>1</Units>
<Rate>0.42900000</Rate>
</Currency>
<Currency>
<ID>CYP</ID>
<Units>1</Units>
<Rate>1.20300000</Rate>
</Currency>
<Currency>
<ID>CZK</ID>
<Units>1</Units>
<Rate>0.02630000</Rate>
</Currency>
<Currency>
<ID>DKK</ID>
<Units>1</Units>
<Rate>0.09430000</Rate>
</Currency>
<Currency>
<ID>EEK</ID>
<Units>1</Units>
<Rate>0.04490000</Rate>
</Currency>
<Currency>
<ID>EUR</ID>
<Units>1</Units>
<Rate>0.70280400</Rate>
</Currency>
<Currency>
<ID>GBP</ID>
<Units>1</Units>
<Rate>0.98300000</Rate>
</Currency>
<Currency>
<ID>HKD</ID>
<Units>1</Units>
<Rate>0.06160000</Rate>
</Currency>
<Currency>
<ID>HRK</ID>
<Units>1</Units>
<Rate>0.09580000</Rate>
</Currency>
<Currency>
<ID>HUF</ID>
<Units>100</Units>
<Rate>0.27500000</Rate>
</Currency>
<Currency>
<ID>ILS</ID>
<Units>1</Units>
<Rate>0.12200000</Rate>
</Currency>
<Currency>
<ID>JPY</ID>
<Units>100</Units>
<Rate>0.43400000</Rate>
</Currency>
<Currency>
<ID>KZT</ID>
<Units>1000</Units>
<Rate>3.97000000</Rate>
</Currency>
<Currency>
<ID>LTL</ID>
<Units>1</Units>
<Rate>0.20400000</Rate>
</Currency>
<Currency>
<ID>MDL</ID>
<Units>1</Units>
<Rate>0.04260000</Rate>
</Currency>
<Currency>
<ID>MTL</ID>
<Units>1</Units>
<Rate>1.63700000</Rate>
</Currency>
<Currency>
<ID>NOK</ID>
<Units>1</Units>
<Rate>0.08720000</Rate>
</Currency>
<Currency>
<ID>NZD</ID>
<Units>1</Units>
<Rate>0.36300000</Rate>
</Currency>
<Currency>
<ID>PLN</ID>
<Units>1</Units>
<Rate>0.19000000</Rate>
</Currency>
<Currency>
<ID>RON</ID>
<Units>1</Units>
<Rate>0.20100000</Rate>
</Currency>
<Currency>
<ID>RUB</ID>
<Units>1</Units>
<Rate>0.01960000</Rate>
</Currency>
<Currency>
<ID>SEK</ID>
<Units>1</Units>
<Rate>0.07570000</Rate>
</Currency>
<Currency>
<ID>SGD</ID>
<Units>1</Units>
<Rate>0.33000000</Rate>
</Currency>
<Currency>
<ID>SKK</ID>
<Units>1</Units>
<Rate>0.02120000</Rate>
</Currency>
<Currency>
<ID>UAH</ID>
<Units>1</Units>
<Rate>0.09520000</Rate>
</Currency>
<Currency>
<ID>USD</ID>
<Units>1</Units>
<Rate>0.47900000</Rate>
</Currency>
<Currency>
<ID>XAU</ID>
<Units>1</Units>
<Rate>373.56700000</Rate>
</Currency>
<Currency>
<ID>XDR</ID>
<Units>1</Units>
<Rate>0.75900000</Rate>
</Currency>
</Currencies>
</CRates>
21 ноя 07, 13:06    [4944552]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
.NET
Member

Откуда: Москва->Петушки
Сообщений: 8258
Ничего что так длинно. )
Вот источник http://www.bank.lv/ValutuKursi/XML/xml.xml.
Вот приблизительно мой код:
        [HttpMethod(typeof(XmlReturnReader), typeof(UrlParameterWriter))]
        [return: XmlRoot("CRates", Namespace = "")]
        public Valutes GetExchangeRatesInternal(DateTime date)
        {
            object valutes = this.Invoke("GetExchangeRatesInternal", 
                "http://www.bank.lv/ValutuKursi/XML/xml.xml", new object[0]);
            return (Valutes)valutes;
        }

Если заменить http://www.bank.lv/ValutuKursi/XML на http://localhost, всё работает.
21 ноя 07, 13:11    [4944587]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
.NET
Member

Откуда: Москва->Петушки
Сообщений: 8258
Может это потому что кодировка у них в XML не задана?
22 ноя 07, 19:02    [4952448]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
Java Programmer
Member

Откуда: Moscow
Сообщений: 919
.NET
Может это потому что кодировка у них в XML не задана?


а может это потому что просто он не лезет на сайт ...
22 ноя 07, 19:21    [4952529]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
Java Programmer
Member

Откуда: Moscow
Сообщений: 919
ну сами подумайте с какой стати он должен ваще туда лезть ?
22 ноя 07, 19:22    [4952534]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
.NET
Member

Откуда: Москва->Петушки
Сообщений: 8258
Тогда скажите как сделать чтоб лез. :)
В чём ошибка?

Аналогичный код для других сайтов работает.
22 ноя 07, 19:25    [4952545]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
.NET
Member

Откуда: Москва->Петушки
Сообщений: 8258
Вот весь класс целиком:
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    public class ExchangeService : HttpGetClientProtocol
    {
        public ExchangeRatesServiceLT()
        {
            this.AllowAutoRedirect = true;
            this.Url = "http://www.bank.lv/ValutuKursi/XML";
            this.Timeout = 10000;
        }

        [HttpMethod(typeof(XmlReturnReader), typeof(UrlParameterWriter))]
        [return: XmlRoot("CRates", Namespace = "")]
        public ValutesArray GetExchangeRatesInternal()
        {
            object valutes = this.Invoke("GetExchangeRatesInternal",
                "http://www.bank.lv/ValutuKursi/XML/xml.xml", new object[0]);
            return (ValutesArray)valutes;
        }

        [XmlType("CRates", Namespace = "")]
        public class ValutesArray
        {

            public string Date;
            [XmlArray()]
            public Valute[] Currencies;
        }

        [XmlType("Currency", Namespace = "")]
        public class Valute
        {
            [XmlElement("ID")]
            public string Code;

            [XmlElement("Units")]
            public int Amount;

            [XmlElement("Rate")]
            public string Value;
        }
    }
22 ноя 07, 19:30    [4952553]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
Java Programmer
Member

Откуда: Moscow
Сообщений: 919
.NET
Тогда скажите как сделать чтоб лез. :)
В чём ошибка?

Аналогичный код для других сайтов работает.


если работает то может тогда сервер возвращает вам результат в хедере которого написано
не content-type=text/xml
а
content-type = text/html

если так то придется сначала вычленить xml в стрингу через какойн нить WebClientа потом подсунуть XMLSerializer и тот сделает вам ваши объектики )
22 ноя 07, 19:32    [4952563]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
.NET
Member

Откуда: Москва->Петушки
Сообщений: 8258
Вы знаете, даже вот так получилось

            using (XmlTextReader xr = new XmlTextReader("http://www.bank.lv/valutukursi/xml/xml.xml"))
                valutes = valutesSerializer.Deserialize(xr);
            return (ValutesArray)valutes;

Без всякого веб-клиента. :)
22 ноя 07, 20:07    [4952645]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
.NET
Member

Откуда: Москва->Петушки
Сообщений: 8258
Мне он изначально не нужен был, наверное.
HttpGetClientProtocol нужен чтобы удалённые методы вызывать,
а не чтоб XML-ники читать. :) Просто я начал лепить по образу и подобию
как тут уже было сделано, для других сайтов.
22 ноя 07, 20:10    [4952658]     Ответить | Цитировать Сообщить модератору
 Re: HttpGetClientProtocol  [new]
Java Programmer
Member

Откуда: Moscow
Сообщений: 919
.NET
Мне он изначально не нужен был, наверное.
HttpGetClientProtocol нужен чтобы удалённые методы вызывать,
а не чтоб XML-ники читать. :) Просто я начал лепить по образу и подобию
как тут уже было сделано, для других сайтов.


ясно ))
23 ноя 07, 12:36    [4954670]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить