Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819

Передача собственных типов данных

28.08.2017, 19:29. Показов 3302. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Не пойму в чём ошибка..

Передаю контракт данных:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[DataContract]
public struct ValuesStruct
{
    [DataMember]
    public StockSharp.Algo.Candles.Candle candle;
    [DataMember]
    public StockSharp.BusinessEntities.Trade[] allTrades;
    [DataMember]
    public DateTimeOffset terminalTime;
    [DataMember]
    public DateTimeOffset last_EnterTime;
    [DataMember]
    public DateTimeOffset last_ExitTime;
}
Если убрать первые 2 поля, то всё работает замечательно (даже без DataMember)

DataContract и DataMember подключены через System.Runtime.Serialization
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.08.2017, 19:29
Ответы с готовыми решениями:

Передача неизвестных типов WCF
Я столкнулся с тем, что функция в хосте должна возвращать объект типа Brush, но фиг там. со стороны клиента возникает ошибка: ...

Передача в функцию данных разных типов
Нужно передать в функцию в качестве аргумента переменную типа ulong a затем переменную типа int Пробовал использовать обобщенный...

Назначить иконку для собственных типов файлов
Привет! Такой вопрос: моя программа сохраняет файл с понятным только ей расширением (.tz). Хотелось бы чтоб сохраненные с таким расширением...

42
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
11.09.2017, 19:08
Студворк — интернет-сервис помощи студентам
Rodion2703, хорошо. В архиве пример, более-менее приближенный к реальности. Разбирайтесь.
Вот ссылка на файл, сюда не лезет, там ваш StockSharp с собой кучу всего тянет. http://dropmefiles.com/LNMm5
1
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 18:56  [ТС]
insite2012, и снова здравствуйте

Не по теме:

Растянул ногу - наконец-то могу продолжить заниматься этим делом :)



Очень прошу в последний раз вашей помощи!.. Осталось совсем чуть-чуть, что мне нужно сделать.. Я могу скинуть на всякий случай dll`ки своей версии библиотеки StockSharp (может быть некоторые проблемы скрыты в этом).


Вроде бы довёл более менее до ума приложение, но оно не хочет работать..

Во первых, после подключения к серверу и вызова функции GetTradeState вылазит ошибка XML (1 скрин) при дебаге приложения. (2 скрин - тоже самое при дебаге сервера)

Во вторых, почему-то опять появилась проблема, когда значения во время сессии не сохраняются( После функции INIT инициализируется timeFrameList, но после вызова Update_TfCandles ошибка, что этот листинг нулевой. (3 скрин)

Рабочий сервис сервера:
C#
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
namespace stocksharp.ServiceContracts {
    public partial class WorkService : IWorkService
    {
        // >> Customizable strategy settings
        public List<int> tf_Periods = new List<int>
        {
            180
        };
        public List<ADX_Configuration> adx_cfgList = new List<ADX_Configuration>
        {
 
        };
 
        // >> Server processing
 
        public List<TimeFrame> timeFrameList;
        public List<TimeFrame> tf;
 
        public static List<Trade> AllTrades;
        public static DateTimeOffset TerminalTime;
        public static DateTimeOffset LastEnterTime;
        public static DateTimeOffset LastExitTime;
 
        public ServerDataObject currentDataObj;
 
        public void Init()
        {
            addLog("Init");
 
            AllTrades = new List<Trade>();
            TerminalTime = DateTimeOffset.Now;
            LastEnterTime = DateTimeOffset.Now;
            LastExitTime = DateTimeOffset.Now;
 
            timeFrameList = new List<TimeFrame>();
            foreach (var tf_per in tf_Periods)
                timeFrameList.Add(new TimeFrame(tf_per));
            // Initialize indicators (ind - indicator)
            foreach (var ind in adx_cfgList)
                timeFrameList[ind.TF_Number].adx.Add(new ADX(ind.Period, ind.Ma_Type));
        }
 
        public TradeState GetTradeState(ServerDataObject dataObj, NeedAction needAction)
        {
            addLog("GetTradeState");
 
            currentDataObj = dataObj;
 
            // -- Synchronizing of current via received
            // - Time
            TerminalTime = dataObj.TerminalTime;
            LastEnterTime = dataObj.LastEnterTime;
            LastExitTime = dataObj.LastExitTime;
            // - Trading
            AllTrades.AddRange(dataObj.NewTrades);
            Update_TfCandles();
 
            // -- Processing
            tf = timeFrameList;
            return updateTradeState(needAction);
        }
 
        public List<int> GetTimeFramePeriods()
        {
            addLog("GetTimeFramePeriods");
 
            return tf_Periods;
        }
        
        private bool Update_TfCandles()
        {
            addLog("Update_TfCandles");
 
 
            bool result = true;
 
            int i = -1;
            foreach (var _tf in timeFrameList)
            {
                i++;
                foreach (var candle in currentDataObj.NewCandles[i])
                {
                    if (_tf.Buffer.Count == 0 || candle.Time >= _tf.Buffer[_tf.Buffer.Count - 1].Time)
                    {
                        _tf.Process_Candle(candle);
                    }
                    else
                    {
                        result = false;
                    }
 
                }
            }
 
            return result;
        }
        private bool Process_UpdateIndicators()
        {
            addLog("Process_UpdateIndicators");
            
            foreach (var _tf in timeFrameList)
                _tf.Update_Indicators();
            tf = timeFrameList;
 
            return true;
        }
 
        void addLog(string message)
        {
            Console.WriteLine(DateTime.Now.ToString(@"yyyy/MM/dd HH:mm:ss |  ") + message);
        }
    }
}
Миниатюры
Передача собственных типов данных   Передача собственных типов данных   Передача собственных типов данных  

0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.09.2017, 19:05
Цитата Сообщение от Rodion2703 Посмотреть сообщение
Во первых
Судя по ошибке, где-то вкрался неверный знак. Проверьте еще раз все.
Цитата Сообщение от Rodion2703 Посмотреть сообщение
Во вторых
Тип используемой привязки? Как сконфигурирован экземплярный режим службы?
1
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 19:10  [ТС]
insite2012,
Цитата Сообщение от insite2012 Посмотреть сообщение
Судя по ошибке, где-то вкрался неверный знак.
Какой неверный знак? Где его искать?

Цитата Сообщение от insite2012 Посмотреть сообщение
Тип используемой привязки? Как сконфигурирован экземплярный режим службы?
Всё по вашему примеру, который вы мне скинули постом выше

C#
1
2
3
4
5
6
7
            // -- init proxy
            
            BasicHttpBinding binding = new BasicHttpBinding();
            EndpointAddress address = new EndpointAddress("http://localhost:8010/WorkService");
            proxy = ChannelFactory<stocksharp.ServiceContracts.IWorkService>.CreateChannel(binding, address);
 
            proxy.Init();
Добавлено через 2 минуты
App.config на сервере
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="stocksharp.ServiceContracts.WorkService" behaviorConfiguration="mexBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8010/WorkService"/>
          </baseAddresses>
        </host>
      <endpoint address="" binding="basicHttpBinding" contract="stocksharp.ServiceContracts.IWorkService"/>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>     
    </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="mexBehavior">
        <serviceMetadata httpGetEnabled="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  </system.serviceModel>
</configuration>
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.09.2017, 19:14
Цитата Сообщение от Rodion2703 Посмотреть сообщение
Какой неверный знак? Где его искать?
Я не вижу всего вашего проекта, а гадать не умею))
Цитата Сообщение от Rodion2703 Посмотреть сообщение
Всё по вашему примеру, который вы мне скинули постом выше
Это был пример, и естественно, я не знал точно, что вам требуется. Как я понимаю, у вас локальное поле-лист с объектами. Но суть в том, что у вас используется режим уровня вызова - при каждом вызове создается экземпляр службы, а по завершении вызова этот экземпляр уничтожается. Проще говоря, тот лист, от которого вы ловите исключение - совсем не тот, что вы инициализировали ранее (того уже нет, он уже умер вместе с его хозяином-экземпляром службы). Понимаете?
1
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 19:17  [ТС]
insite2012,
Цитата Сообщение от insite2012 Посмотреть сообщение
Понимаете?
Очень хорошо понимаю)

Инициализирую экземпляр службы единожды (переменная proxy, как я понял). Проблема не может быть в чем-то другом? Или всё-таки я где-то оставил повторную инициализацию proxy? Уверен на 90%, что она не создаётся 2жды
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.09.2017, 19:26
Цитата Сообщение от Rodion2703 Посмотреть сообщение
инициализирую экземпляр службы единожды (переменная proxy, как я понял). Проблема не может быть в чем-то другом?
Вы не улавливаете сути. Вот действия, по шагам.
1. Вы создаете и запускаете хост. Он работает, НО экземпляра класса службы еще нет.
2. Вы создаете посредника (прокси), и вызываете метод Init() службы. Вызов доходит до хоста, и в этот момент создается экземпляр службы, который и делает то, что вы хотите.
3. Вызов метода Init() завершается, и после его завершения (Именно так!!!) экземпляр службы (а вместе с ним и все его поля и прочее состояние) уничтожаются сборщиком мусора. Все, его больше нет. Помянем его, пусть покоится с миром.
4. Вы вызываете другой метод службы, и снова - создается экземпляр службы, который и пытается работать со своим полем - листом. Но лист этот совершенно пуст, его же никто и ничем не заполнил. Тут вы и ловите исключение, вполне ожидаемо.
Так вам понятнее, как оно работает?
1
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 19:32  [ТС]
insite2012, аа.. То есть, proxy это не экземпляр службы, а лишь посредник. Спасибо большое за объяснение) Так точно понятно)

Тогда управлять экземпляром службы? Как его сохранить? Где он, собственно, находится, когда мы соединяемся по proxy?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.09.2017, 19:44
Цитата Сообщение от Rodion2703 Посмотреть сообщение
proxy это не экземпляр службы, а лишь посредник
Именно так.
Цитата Сообщение от Rodion2703 Посмотреть сообщение
Тогда управлять экземпляром службы?
Да, управлять его временем жизни.
Цитата Сообщение от Rodion2703 Посмотреть сообщение
Как его сохранить?
Тут многое зависит от задачи. Варианты такие:
1. Как и сейчас, на каждый вызов метода создается экземпляр службы.
2. Режим сессии, когда (в идеале) на каждый посредник приходится свой экземпляр службы. В таком случае все данные, с которыми мы работаем (в этой сессии) сохраняются.
3. Синглетный режим. Экземпляр службы всего один, он создается при запуске хоста и остается в памяти всегда, пока работает хост. Все посредники при вызове методов работают с одним и тем же экземпляром.
Цитата Сообщение от Rodion2703 Посмотреть сообщение
Где он, собственно, находится, когда мы соединяемся по proxy?
Где и все ссылочные объекты - в куче, естественно))
0
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 19:49  [ТС]
insite2012,
Цитата Сообщение от insite2012 Посмотреть сообщение
Тут многое зависит от задачи. Варианты такие:
Да, помню еще месяц назад разбирал эти вариант >)
Мне нужен был режим сессии (как и сейчас), но настроить я его не мог (и сейчас не очень представляю как )

Не по теме:

Цитата Сообщение от insite2012 Посмотреть сообщение
Где и все ссылочные объекты - в куче, естественно))
Мы не можем к нему достучаться?) А где, собственно, хранятся данные о подключенном пользователе? О текущих соединениях?

Убрал в оффтоп, тк это не основная задача.. Главное хотя бы заработал бы.. Остальное потом можно прикрутить :)

0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.09.2017, 19:58
Цитата Сообщение от Rodion2703 Посмотреть сообщение
не очень представляю как
1. Использовать стек каналов (привязку), который это поддерживает (NetTcpBinding, WsHttpBinding) и сконфигурировать его должным образом.
2. В определении контракта службы явно указать на необходимость сессионной работы.
3. В определении реализации службы установить свойство InstanceContextMode атрибута ServiceBehavior в InstanceContextMode.PerSession.
PROFIT!
1
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 21:01  [ТС]
insite2012,
Цитата Сообщение от insite2012 Посмотреть сообщение
который это поддерживает (NetTcpBinding, WsHttpBinding)
Спасибо большое за попунктное объяснение)

А какую привязку лучше выбрать для моей задачи? Мне необходимо, чтобы сервер мог обрабатывать несколько клиентов одновременно. А работа заключается лишь в обработке приходящей информации и отправки результата.

Добавлено через 19 минут
insite2012, вроде бы настроил конфиг сервера
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="stocksharp.ServiceContracts.WorkService" behaviorConfiguration="mexBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8010/WorkService"/>
            <add baseAddress="http://localhost:8020/WorkService"/>
          </baseAddresses>
        </host>
      <endpoint address="" binding="netTcpBinding" contract="stocksharp.ServiceContracts.IWorkService"/>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>     
    </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="mexBehavior">
        <serviceMetadata httpGetEnabled="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  </system.serviceModel>
</configuration>
Теперь, как подключиться клиенту? Такой код не срабатывает(

C#
1
2
3
            binding = new BasicHttpBinding();
            address = new EndpointAddress("net.tcp://localhost:8010/WorkService");
            proxy = ChannelFactory<stocksharp.ServiceContracts.IWorkService>.CreateChannel(binding, address);
Говорит - только по http..
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.09.2017, 21:04
Цитата Сообщение от Rodion2703 Посмотреть сообщение
какую привязку лучше выбрать для моей задачи?
Для локальной сети можно NetTcpBinding. Для взаимодействия через Internet - WsHttpBinding. И желательно использовать т.н. демаркацию методов. В коде ниже есть пример. Методы помечены специальным образом так, что метод Open() начинает сессию, и если его не вызвать первым, то работа со службой будет невозможна. После можно вызывать метод Operate() (или другие, помеченные аналогично), и последним - метод Close(). После его вызова сессия завершается. Явное указание границ сессии - это хорошая практика кодирования, тем самым вы и тот, кто будет читать код сразу будет видеть логические границы сеанса.
C#
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
 
namespace Server {
    class Program {
        static void Main(string[] args) {
            Uri address = new Uri("http://localhost:8010/Test");
            WSHttpBinding binding = new WSHttpBinding(SecurityMode.None, true);
            using (ServiceHost host = new ServiceHost(typeof(Test), address)) {
                host.AddServiceEndpoint(typeof(ITest), binding, "");
                host.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
                host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
                host.Opening += new EventHandler(host_Opening);
                host.Opened += new EventHandler(host_Opened);
                host.Open();
                Console.ReadLine();
            }
        }
 
        static void host_Opened(object sender, EventArgs e) {
            Console.WriteLine("Service is ready...");
        }
 
        static void host_Opening(object sender, EventArgs e) {
            Console.WriteLine("Opening service...");
        }
    }
    [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
    public class Test : ITest {
        private List<int> args = new List<int>();
        public void Open() {
            Console.WriteLine("Opening session...");
        }
 
        public void Operate(int arg) {
            args.Add(arg);
            Console.WriteLine("Do some work...");
            Console.WriteLine("args content: {0}", string.Join(" ", args));
        }
 
        public void Close() {
            Console.WriteLine("Closing session...");
        }
    }
    [ServiceContract(SessionMode=SessionMode.Required)]
    public interface ITest {
        [OperationContract(IsInitiating=true, IsTerminating=false)]
        void Open();
        [OperationContract(IsInitiating=false, IsTerminating=false)]
        void Operate(int arg);
        [OperationContract(IsInitiating=false, IsTerminating=true)]
        void Close();
    }
}
1
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 21:33  [ТС]
insite2012, а чем отличается address от адреса в host.AddServiceEndpoint(typeof(IWorkService), binding, "другой адрес");?
0
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 21:40  [ТС]
insite2012, ошибка вылезла(

Клиент: (500 ошибка сервера)
C#
1
2
3
WSHttpBinding binding = new WSHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:8010/WorkService");
proxy = ChannelFactory<stocksharp.ServiceContracts.IWorkService>.CreateChannel(binding, address);
Сервер: (скрин)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Uri address = new Uri("http://localhost:8010/WorkService");
WSHttpBinding binding = new WSHttpBinding(SecurityMode.None, true);
 
using (ServiceHost host = new ServiceHost(typeof(WorkService), address))
{
    host.AddServiceEndpoint(typeof(IWorkService), binding, "");
    host.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
    host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
 
    host.Opening += new EventHandler(host_Opening);
    host.Opened += new EventHandler(host_Opened);
    host.Open();
 
    Console.ReadLine();
}
Миниатюры
Передача собственных типов данных  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.09.2017, 21:44
Цитата Сообщение от Rodion2703 Посмотреть сообщение
чем отличается address от адреса
Это т.н. "базовый" адрес (baseAddress). Вы можете его не задавать и задать полный адрес в определении конечной точки, или задать базовый адрес, а в определении конечной точки только частичный Uri, в общем, это все комбинации.

Добавлено через 3 минуты
Цитата Сообщение от Rodion2703 Посмотреть сообщение
ошибка вылезла(
Это вполне ожидаемо. Или вы думаете, что каждый параметр в конструкторе WsHttpBinding на стороне службы я написал просто так, ради прикола? Стеки каналов с обоих сторон должны быть в точности идентичными. Сделайте так.
1
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 21:55  [ТС]
insite2012,
Цитата Сообщение от insite2012 Посмотреть сообщение
Стеки каналов с обоих сторон должны быть в точности идентичными
Я не понимаю, о чем вы говорите
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
26.09.2017, 21:57
Цитата Сообщение от Rodion2703 Посмотреть сообщение
не понимаю, о чем вы говорите
Стек каналов - это привязка. Посмотрите как она сконфигурирована на стороне сервера и как-на стороне клиента. Приведите сторону клиента в полное соответствие стороне сервера. Так более понятно?
Сторона сервера:
Цитата Сообщение от Rodion2703 Посмотреть сообщение
WSHttpBinding binding = new WSHttpBinding(SecurityMode.None, true);
Сторона клиента:
Цитата Сообщение от Rodion2703 Посмотреть сообщение
WSHttpBinding binding = new WSHttpBinding();
1
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 22:06  [ТС]

Не по теме:

insite2012,

Цитата Сообщение от insite2012 Посмотреть сообщение
Стек каналов - это привязка.
Хотелось бы, конечно, где-нибудь почитать теорию обо всём этом, чтобы раз и на всегда у меня в голове уложился метод работы между клиентом и сервером.. :wall:

Для меня это определение аналогично: производная - это касательная к графику :scratch:



insite2012, совсем я невнимательный стал к вечеру Не заметил, что есть аргументы для экземпляра привязки.

Спасибо огромное) Ошибка пропала, и мы вернулись к какой-то непонятной фиговинке
Опять ошибка о каком-то знаке.. Я ведь даже XML файлы не использую.
Она возникает на стороне сервера. Есть хотя бы какие-нибудь догадки об этом?
Миниатюры
Передача собственных типов данных  
0
 Аватар для Rodion2703
24 / 20 / 5
Регистрация: 06.01.2013
Сообщений: 819
26.09.2017, 22:34  [ТС]
Как мне отследить источник ошибки?

Добавлено через 26 минут
Как я догадываюсь, передача между клиентом\сервером идёт через xml код?
Как я догадываюсь, сериализация - это объект записать в текстовом виде в xml код (как JSON)
Как я догадываюсь, при сериализации что-то идёт не так, поэтому выскакивает ошибка


Не знаю, может на это повлиял контракт данных?

C#
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
namespace stocksharp.DataContracts {
    [DataContract]
    [KnownType("GetKnownTypes")]
    public class ServerDataObject
    {
        [DataMember]
        public List<Candle>[] NewCandles { get; set; }
        [DataMember]
        public List<Trade> NewTrades { get; set; }
        [DataMember]
        public DateTimeOffset TerminalTime { get; set; }
        [DataMember]
        public DateTimeOffset LastEnterTime { get; set; }
        [DataMember]
        public DateTimeOffset LastExitTime { get; set; }
 
        static Type[] GetKnownTypes()
        { 
            return new Type[]
            {
                typeof(TimeFrameCandle), typeof(RangeCandle), typeof(VolumeCandle), 
                typeof(TickCandle), typeof(PnFCandle), typeof(RenkoCandle)
            };
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2017, 22:34

Чтение и запись типов, массив типов и List<> данных в файл
Здравствуйте Подскажите способ записи и чтения любых типов данных (не компонентов) Например это: string в котором текст может быть...

Передача в методы переменных ссылочных типов
Есть класс: class Sample { int i; public Sample(int x) { i = x; } ...

Троелсен, Передача ссылочных типов по значению
class Person { } static void SendAPersonByValue(Person p) //получена копия ссылки на объект из вызывающего кода. { p = new...

Создание собственных типов данных
Я смотрю исходники на гитхаб, там не раз можно встреть записи вида typedef int book; typedef float fl; И тому подобные записи, не...

Сортировка собственных типов данных
Задача: В соответствии с вариантом нужно реализовать шаблонную функцию (функции) для сортировки. Необходимо, чтобы разработанная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru