powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Silverlight Валюты WCF
28 сообщений из 28, показаны все 2 страниц
Silverlight Валюты WCF
    #36838171
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Подскажите как правильно вызывать службу и брать данные с сервиса Центробанка в listbox?

Main.xaml
Код: plaintext
1.
2.
3.
4.
5.
6.
<Grid x:Name="LayoutRoot">
      <ListBox x:Name="dg" Width="400" Height="200">
      </ListBox> 
          <Button x:Name="btn" Click="btn_Click" Width="100" Height="20">
      </Button>
  </Grid>


в ServiceReference добавил службу http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL
появилась в проекте папка DataSources c System.Xml.Linq.XElement.datasource

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 public WS.DailyInfoSoapClient k = new DailyInfoSoapClient(); //служба

 private void btn_Click(object sender, RoutedEventArgs e)
        {
              k.GetCursOnDateCompleted+=new EventHandler<GetCursOnDateCompletedEventArgs>(k_GetCursOnDateCompleted);
            k.GetCursDynamicAsync(DateTime.Now.AddDays(-2), DateTime.Now,"EUR");
        }

void k_GetCursOnDateCompleted(object sender, GetCursOnDateCompletedEventArgs e)
        {
            dg.Items.Add(e.Result);
        }

пробую на localhost ничего не выводит.
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838256
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silverlight_Newsпробую на localhost ничего не выводит.
хм...а у меня выводит ошибку касательно cross-domain communication

т.е., пока Центробанк не положит соответствующий clientaccesspolicy.xml в корень сервиса, SL коннектиться не будет (упрямая тварь)
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838274
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silverlight_News,

возможный workaround - транзитить через свой сервис (где будет лежать clientaccesspolicy.xml)
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838381
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR, залил на локальный iis, clientaccesspolicy положил в корень. ничего не выходит. а для SOAP нужно еще что то ставить ?

нашел в xml фотмате валюты на http://www.cbr.ru/scripts/XML_daily.asp
но тоже что то не хочет забирать.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 private void btn_Click(object sender, RoutedEventArgs e)
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.XmlResolver = new XmlXapResolver();
            XmlReader reader = XmlReader.Create("http://www.cbr.ru/scripts/XML_daily.asp");
            reader.MoveToContent();
            while (reader.Read())
           {
               if (reader.NodeType == XmlNodeType.Element && reader.Name == "ValCurs")
                {
                  dg.Items.Add(new ListBoxItem()
                  {
                      Content = reader.GetAttribute("Name") +
                            ", " + reader.GetAttribute("Value")
                  });
                }

               if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "ValCurs")
                {
                    MessageBox.Show("Error read!");
                }

            }
            reader.Close();
        }
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838519
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silverlight_Newsзалил на локальный iis, clientaccesspolicy положил в корень. ничего не выходит.
свой веб/вцф сервис, который запрашивает данные у сервиса Центробанка и выдает их SL-клиенту? какая ошибка?
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838676
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR
свой веб/вцф сервис, который запрашивает данные у сервиса Центробанка и выдает их SL-клиенту? какая ошибка?

wcf сервиса как такого нету.
я добавил ServiceReference с адресом на службу ЦБ и дальше код в 1 посте.
насчет ошибок не выходят. нажимаешь на кнопку также пусто в listbox.
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838739
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silverlight_News,

"wcf сервиса как такого нету" - тогда и указанного workaround-а быть не может...

кстати, в коде несостыкуха - k.GetCursOnDateCompleted+=... а вызывается k.GetCursDynamicAsync...

и еще, мне GetCursDynamic никакаких полезных данных не выдал, а вот GetCursOnDate выдает, за сегодня, к примеру...
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838765
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR, да чет в коде не то.. чуть позже посмотрю отпишусь...
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838825
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR, на домашнем компе какие то ошибки выходят...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
[Async_ExceptionOccurred]
Аргументы: 
Недоступны строки отлаживаемых ресурсов. Ключ и аргументы часто предоставляют достаточно информации для диагностики проблемы. См. http://go.microsoft.com/fwlink/?linkid=106663&Version=4.0.50524.0&File=System.dll&Key=Async_ExceptionOccurred

   в System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
   в SilverlightApplication6.WS.GetCursOnDateCompletedEventArgs.get_Result()
   в SilverlightApplication6.Home.k_GetCursOnDateCompleted(Object sender, GetCursOnDateCompletedEventArgs e)
   в SilverlightApplication6.WS.DailyInfoSoapClient.OnGetCursOnDateCompleted(Object state)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private void btn_Click(object sender, RoutedEventArgs e)
        {
            k.GetCursOnDateCompleted += new EventHandler<GetCursOnDateCompletedEventArgs>(k_GetCursOnDateCompleted);
            k.GetCursOnDateAsync(DateTime.Now);
        }

        void k_GetCursOnDateCompleted(object sender, GetCursOnDateCompletedEventArgs e)
        {
            dg.Items.Add(e.Result);
        }
clientaccesspolicy.xml лежит в корне.
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838866
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR,
debag-ер выдал эту ошибку.

Произошла ошибка при попытке создать запрос к URI "http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl". Это могло быть вызвано попыткой междоменного доступа к службе без наличия приемлемой междоменной политики или с политикой, непригодной службам SOAP. Может понадобиться связаться с владельцем службы для публикации файла междоменной политики и убедиться в том, что она позволяет отправлять заголовки HTTP, связанные с SOAP. Эта ошибка также может быть вызвана использованием внутренних типов в прокси-сервере веб-службы без использования атрибута InternalsVisibleToAttribute. Подробности см. во внутреннем исключении.


ServiceReferences.ClientConfig

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="DailyInfoSoap" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx"
                binding="basicHttpBinding" bindingConfiguration="DailyInfoSoap"
                contract="WS.DailyInfoSoap" name="DailyInfoSoap" />
        </client>
    </system.serviceModel>
</configuration>

...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838869
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<endpoint "http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl"
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36838935
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silverlight_News,

"Это могло быть вызвано попыткой междоменного доступа..." - об этом я говорил в самом первом посте

в аттаче - solution vs2010 с двумя проектами, один - SL, второй - веб и под ним "транзитный" wcf-сервис (если хостить этот wcf-сервис на другом цомпутере, то надо подложить в корень, там где Web.config, файл clientaccesspolicy.xml)
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36839408
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR, у меня vs2008 , я сделал как у вас проект.

только тут на Tuple ошибки

Error 1 The type or namespace name 'Tuple' could not be found (are you missing a using directive or an assembly reference?)

Error 2 The name 'Tuple' does not exist in the current context


Код: plaintext
1.
2.
3.
4.
5.
 dg.ItemsSource = e.Result.Select<System.Collections.ObjectModel.ObservableCollection<object>,
                Tuple<string, string, string, string, string>>(
                i => Tuple.Create<string, string, string, string, string>(
                    i[0].ToString(), i[1].ToString(), i[2].ToString(), i[3].ToString(), i[4].ToString()
                    ));
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36839427
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR, я как понял это reference System.Tuple идет в C# 4.0...
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36839597
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silverlight_NewsSystem.Tuple идет в C# 4.0...
да, просто удобно его подсовывать для биндинга в примерах/тестах (биндятся свойства Item1,2,...)

ну так замените его на какой-нить простецкий
public class CursOnDate
{
public string Vname { get; set; }
public string Vnom { get; set; }
public string Vcurs { get; set; }
public string Vcode { get; set; }
public string VchCode { get; set; }
}

и затем

dg.ItemsSource = e.Result.Select<System.Collections.ObjectModel.ObservableCollection<object>, object>(
i => new CursOnDate {
Vname = i[0].ToString().Trim(),
Vnom = i[1].ToString(),
Vcurs = i[2].ToString(),
Vcode = i[3].ToString(),
VchCode = i[4].ToString()
});

PS. а вообще "правильно" передавать коллекцию "common type"(общий тип для серверной и клиентской сторон) с навешенными DataContractAttribute и DataMemberAttribute (на свойства), там же можно навесить полезные атрибуты из System.ComponentModel.DataAnnotations (DisplayAttribute, ValidationAttribute и т.п.)
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36839607
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
несущественная, но все же, поправка
dg.ItemsSource = e.Result.Select<System.Collections.ObjectModel.ObservableCollection<object>, CursOnDate >(...
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36839615
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRну так замените его на какой-нить простецкий
к сожалению, анонимные классы не биндятся (в SL)
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36839835
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR,
PS. а вообще "правильно" передавать коллекцию "common type"(общий тип для серверной и клиентской сторон) с навешенными DataContractAttribute и DataMemberAttribute (на свойства), там же можно навесить полезные атрибуты из System.ComponentModel.DataAnnotations (DisplayAttribute, ValidationAttribute и т.п.)

как понял надо свойства описать в IService1 ? и потом передавать их на клиента ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
[DataContract]
        class CursOnDate 
        {
            [DataMember]
                    public string Vname
                    {
                        get
                        {
                            return Vname;
                        }
                        set
                        {
                            Vname = value;
                        }
                    }

            public string Vnom
            {
                get
                {
                    return Vnom;
                }
                set
                {
                    Vnom = value;
                }
            }
            public string Vcurs
            {
                get
                {
                    return Vcurs;
                }
                set
                {
                    Vcurs = value;
                }
            }
            public string Vcode
            {
                get
                {
                    return Vcode;
                }
                set
                {
                    Vcode = value;
                }
            }
            public string VchCode
            {
                get
                {
                    return VchCode;
                }
                set
                {
                    VchCode = value;
                }
            }
        
     }

...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36839943
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silverlight_Newsкак понял надо свойства описать в IService1 ? и потом передавать их на клиента ?
Да без разницы, где описывать, важно - чтобы обе стороны, и серверная и клиентская, "знали" этот тип. Обычно общие типы выносят в отдельную сборку, но в случае с SL это не проходит (dll компиленное на "полноценном" FW несовместимо с "урезанным" SL). Чтобы не делать копии исходников, их можно "зашарить" между проектами (SL и неSL, напр.WCF).

Кстати, у Центробанка же есть XML-раздача - GetCursOnDateXML - может лучше ее задействовать, чтобы не возиться с общими типами?

а это что за "конструкция"?
Silverlight_News
Код: plaintext
\n                    public string Vname\n                    {\n                        get\n                        {\n                            return Vname;\n                        }\n                        set\n                        {\n                            Vname = value;\n                        }\n                    }\n
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36840379
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR, нашел в инете но Response я как понял нету в SL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 XmlDocument CourseCBR = new XmlDocument();
            CourseCBR.Load("http://www.cbr.ru/scripts/XML_daily.asp");
            XmlNode oNode = CourseCBR.DocumentElement;
            XmlNodeList oNodeList_Value = oNode.SelectNodes("/ValCurs/Valute/Name");
            XmlNodeList oNode_Value = oNode.SelectNodes("/ValCurs/Valute/Value");
        Response.Write(oNodeList_Value.Item(1).OuterXml.ToString() + " : " + oNode_Value.Item(1).OuterXml.ToString());
            

правильней наверное так... думал может из сервиса как то возвращать им значения а на клиенте их вызывать.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[DataContract]
      public  class CursOnDate 
        {
        public string  _Vname;
[DataMember]
           public string Vname
           {
             get
                 {
                  return _Vname;
                 }
             set
                 {
                  _Vname = value;
                 }
           }
        }

насчет "зашарить" между проектами (SL и неSL, напр.WCF). посмотрел но пока не делал , я понял надо сделать один класс и сделать ссылку на него в веб проекте потом использовать в сервисе? как можно реализовать через GetCursOnDateXML не понял.
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36840803
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silverlight_Newsнашел в инете но Response я как понял нету в SL
ха! ну тогда никаких "транзитных" сервисов и не надо - SL легко скачает XML с помощью WebClient-а (если не получиться - подмогну чуть позже:)

> правильней наверное так...
угу

> как можно реализовать через GetCursOnDateXML не понял.
да собственно, от того как сделано в примере, мало чем отличается - упрощение лишь в том что XML можно передать как одну строку, но на клиенте все-равно возиться с биндингом...
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36840971
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот, все делается на клиенте SL, единственная проблема - Центробанк выдает хмлину в кодировке windows-1251, а сильвер понимает лишь юникоды...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            WebClient c = new WebClient();
            c.DownloadStringCompleted += new DownloadStringCompletedEventHandler(c_DownloadStringCompleted);
            c.DownloadStringAsync(new Uri("http://www.cbr.ru/scripts/XML_daily.asp"));
        }
        void c_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            System.Xml.Linq.XDocument xdoc = System.Xml.Linq.XDocument.Parse(e.Result);
            dg.ItemsSource = xdoc.Root.Elements("Valute").Select<System.Xml.Linq.XElement, CursOnDate>(
                i => new CursOnDate {
                    //Vname = i.Element("Name").Value, // windows-1251 не поддерживается в SL
                    Vnom = i.Element("Nominal").Value,
                    Vcurs = i.Element("Value").Value,
                    Vcode = i.Element("NumCode").Value,
                    VchCode = i.Element("CharCode").Value
                });
        }
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36842770
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR, Спасибо!
Насчет windows-1251 не поддерживается в SL это конечно плохо... вообще задача была сделать бегущую валютную и новостную строку ЦБ на SL. Думал что сервис если есть, то можно забирать определенные данные и в строку передать результат.
а как передать определенный массив строк из xml в TextBloсk ?
Код: plaintext
1.
2.
3.
4.
5.
for(int i=0; i<15;i++)
   {
     Response.Write(oNodeList_Value.Item(i).OuterXml.ToString() + " : " + oNode_Value.Item(i).OuterXml.ToString());
 // типа EUR : 39.3456 USD : 30.5534 и.т.д
   }
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36844471
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю автору будет полезен труд другого автора :)
http://habrahabr.ru/blogs/silverlight/75531/
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36844478
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жуть конечно. Когда уж тут бизнес-приложениями заниматься.
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36844664
Silverlight_News
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа, Спасибо уже читаю.
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36845009
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Silverlight_News,

http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx
http://sql-ru.corp.parking.ru/forum/actualthread.aspx?tid=634915
...
Рейтинг: 0 / 0
Silverlight Валюты WCF
    #36845015
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.cbr.ru/scripts/Root.asp?Prtid=DWS
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Silverlight Валюты WCF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]