Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Silverlight Валюты WCF / 25 сообщений из 28, страница 1 из 2
09.09.2010, 15:06
    #36838171
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
Добрый день! Подскажите как правильно вызывать службу и брать данные с сервиса Центробанка в 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
09.09.2010, 15:43
    #36838256
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
Silverlight_Newsпробую на localhost ничего не выводит.
хм...а у меня выводит ошибку касательно cross-domain communication

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

возможный workaround - транзитить через свой сервис (где будет лежать clientaccesspolicy.xml)
...
Рейтинг: 0 / 0
09.09.2010, 16:30
    #36838381
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
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
09.09.2010, 17:04
    #36838519
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
Silverlight_Newsзалил на локальный iis, clientaccesspolicy положил в корень. ничего не выходит.
свой веб/вцф сервис, который запрашивает данные у сервиса Центробанка и выдает их SL-клиенту? какая ошибка?
...
Рейтинг: 0 / 0
09.09.2010, 18:12
    #36838676
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
LR
свой веб/вцф сервис, который запрашивает данные у сервиса Центробанка и выдает их SL-клиенту? какая ошибка?

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

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

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

и еще, мне GetCursDynamic никакаких полезных данных не выдал, а вот GetCursOnDate выдает, за сегодня, к примеру...
...
Рейтинг: 0 / 0
09.09.2010, 19:02
    #36838765
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
LR, да чет в коде не то.. чуть позже посмотрю отпишусь...
...
Рейтинг: 0 / 0
09.09.2010, 19:42
    #36838825
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
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
09.09.2010, 20:20
    #36838866
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
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
09.09.2010, 20:24
    #36838869
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
<endpoint "http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl"
...
Рейтинг: 0 / 0
09.09.2010, 21:25
    #36838935
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
Silverlight_News,

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

в аттаче - solution vs2010 с двумя проектами, один - SL, второй - веб и под ним "транзитный" wcf-сервис (если хостить этот wcf-сервис на другом цомпутере, то надо подложить в корень, там где Web.config, файл clientaccesspolicy.xml)
...
Рейтинг: 0 / 0
10.09.2010, 09:19
    #36839408
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
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
10.09.2010, 09:32
    #36839427
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
LR, я как понял это reference System.Tuple идет в C# 4.0...
...
Рейтинг: 0 / 0
10.09.2010, 10:44
    #36839597
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
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
10.09.2010, 10:46
    #36839607
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
несущественная, но все же, поправка
dg.ItemsSource = e.Result.Select<System.Collections.ObjectModel.ObservableCollection<object>, CursOnDate >(...
...
Рейтинг: 0 / 0
10.09.2010, 10:48
    #36839615
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
LRну так замените его на какой-нить простецкий
к сожалению, анонимные классы не биндятся (в SL)
...
Рейтинг: 0 / 0
10.09.2010, 11:53
    #36839835
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
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
10.09.2010, 12:23
    #36839943
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
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
10.09.2010, 14:24
    #36840379
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
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
10.09.2010, 16:22
    #36840803
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
Silverlight_Newsнашел в инете но Response я как понял нету в SL
ха! ну тогда никаких "транзитных" сервисов и не надо - SL легко скачает XML с помощью WebClient-а (если не получиться - подмогну чуть позже:)

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

> как можно реализовать через GetCursOnDateXML не понял.
да собственно, от того как сделано в примере, мало чем отличается - упрощение лишь в том что XML можно передать как одну строку, но на клиенте все-равно возиться с биндингом...
...
Рейтинг: 0 / 0
10.09.2010, 17:32
    #36840971
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
ну вот, все делается на клиенте 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
13.09.2010, 08:39
    #36842770
Silverlight_News
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
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
13.09.2010, 22:44
    #36844471
уТКа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
думаю автору будет полезен труд другого автора :)
http://habrahabr.ru/blogs/silverlight/75531/
...
Рейтинг: 0 / 0
13.09.2010, 22:51
    #36844478
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Silverlight Валюты WCF
жуть конечно. Когда уж тут бизнес-приложениями заниматься.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Silverlight Валюты WCF / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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