Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697

Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)

01.11.2017, 20:41. Показов 2599. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть WCF сервис настроен на net.tcp, в сервисе установлен EF и использован CodeFirst подход, небольшая модель описана ниже:
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
    public class Authorization
    {
        public int AuthorizationId { get; set; }
 
        [Required(ErrorMessage = "Поле Логин обязательно к заполнению")]
        [StringLength(50)]
        public string Login { get; set; }
 
        [Required(ErrorMessage = "Поле Пароль обязательно к заполнению")]
        [MaxLength]
        public string Password { get; set; }
 
        public virtual User User { get; set; }
    }
 
public class DBEntities : DbContext
    {
        public DBEntities()
            : base("TestWCFSolutionDB")
        {
            if (!Users.Any())
            {
                var users = new User[]
                {
                    new User { FullName = "Иванов И.И." },
                    new User { FullName = "Козлов П.С." },
                    new User { FullName = "Петрова Е.В." }
                };
 
                Users.AddRange(users);
 
                SaveChanges();
            }
 
            if (!Authorizations.Any())
            {
                Authorizations.Add(new Authorization
                {
                    Login = "Ivanov Ivan",
                    Password = "202cb962ac59075b964b07152d234b70",
                    User = Users.SingleOrDefault(u => u.UserId == 1)
                });
 
                SaveChanges();
            }
        }
 
        public virtual DbSet<Authorization> Authorizations { get; set; }
 
        public virtual DbSet<User> Users { get; set; }
 
        public virtual DbSet<Log> Logs { get; set; }
    }
Сервис имеет контракт:
C#
1
2
3
4
5
6
7
8
9
10
    [ServiceContract]
    public interface IMyService
    {
        /// <summary>
        /// Коллекция авторизаций
        /// </summary>
        /// <returns></returns>
        [OperationContract]
        List<Authorization> GetAuthorizations();
    }
Логика расписана ниже:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public class MyService : IMyService
    {
        /// <summary>
        /// Коллекция Authorizations
        /// </summary>
        /// <returns></returns>
        public List<Authorization> GetAuthorizations()
        {
            using (var context = new DBEntities())
            {
                return context.Authorizations.ToList();
            }
        }
    }
Стартую сервис и запускаю клиент. В клиенте при первом запуске и создании формы авторизации отрабатывает следующая логика в конструкторе:
C#
1
2
3
4
5
6
        public AuthorizationViewModel()
        {
            serviceClient = new MyServiceClient();
 
            Authorizations = new ObservableCollection<Authorization>(serviceClient.GetAuthorizations());
        }
Создается объект клиента сервиса, делается вызов метода для выдачи коллекции, что при первом обращении к EF само собой вызывает создание БД на сервере SQL и заполнение таблиц первоначальными данными из конструктора EF. База данных успешно создается и в нее добавляются первоначальные данные, клиент выдает ошибку при чтении данных из таблицы и ловит 3 exception (во вложении). Подскажите в чем моя ошибка?
Миниатюры
Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)   Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)   Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)  

0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2017, 20:41
Ответы с готовыми решениями:

Посоветуйте литературу по MVVM, MVC, WPF, WCF, ASP.NET, Silverlight
Всем привет, посоветуйте, пожалуйста, литературу/учебники по темам: MVVM, MVC, WPF, WCF, ASP.NET, Silverlight Спасибо.

Получения данных из DataGrid WPF MVVM
Добрый день господа форумчане. Возник вопрос, как при использовании паттерна MVVM в WPF при выделении строки в DataGrid получить её...

WS,WCF,WPF и передача данных между разными процессами (удалёнными\локальными)
Доброе утро. Задача стоит в условиях локальной работы! У меня есть WCF + WindowsService (имитация сервера) Есть WPF приложение...

41
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 20:19
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Midian Посмотреть сообщение
Тут все верно, это CodeFirst, таким способом он создает связь между таблицами.
Это я понял.
Сделайте так. В точке останова внутри метода сервиса посмотрите ТОЧНО, какая запись возвращается из БД, и что у нее внутри, а потом, замените вызов БД фейком, но ТОЧНО ТАКИМ ЖЕ, как и вернулось из БД. Вот тогда и будет ясно, в чем проблема.
И да, пометьте Autorizatuion и User как [DataContract], а все их члены, нужные для видимости через сеть как [DataMamber].
Естественно, после этого не забудьте обновить ссылку на службу в клиенте.
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 20:28  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
пометьте Autorizatuion и User как [DataContract], а все их члены, нужные для видимости через сеть как [DataMamber].
Пометил, не помогло. Вот что прилетает из базы:
Миниатюры
Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 20:32
Цитата Сообщение от Midian Посмотреть сообщение
Вот что прилетает из базы:
Внутри свойства User коллекция типов Authorization что из себя представляет?

Добавлено через 2 минуты
Midian, и да, а теперь создайте такую же коллекцию, сделайте вызов и на точке останова сделайте такой же скрин, как выше.
По моему я понял в чем проблема у вас.
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 20:32  [ТС]
insite2012, Вроде бы там все нормально:
Миниатюры
Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 20:34
Midian,
Цитата Сообщение от insite2012 Посмотреть сообщение
теперь создайте такую же коллекцию
Вручную создайте, я имел ввиду.
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 20:35  [ТС]
insite2012, Левак я ему создаю вот такой:
Миниатюры
Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 20:37
Цитата Сообщение от Midian Посмотреть сообщение
Левак я ему создаю вот такой:
Это я понял. Сделайте вызов, и перед возвратом на точке останова скрин, чтобы видеть что возвращается. Ну как выше, вы поняли.
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 20:40  [ТС]
insite2012, Вот:
Миниатюры
Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 20:42
Цитата Сообщение от Midian Посмотреть сообщение
Вот:
Воооот!
А теперь сравните типы (они в фигурных скобках на ваших скринах):
то что вы создали руками (и это именно то, что ожидает клиент), и то что вам прилетело их EF. Разница видна, я думаю?
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 20:42  [ТС]
insite2012, И что мне делать?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 20:48
Цитата Сообщение от Midian Посмотреть сообщение
И что мне делать?
Хм... Интересный вопрос...
Думаю, что если не использовать EF, а работать с БД напрямую, это бы спасло отца русской демократии.
Но так же много кода, верно?)))
Попробуйте сделать для начала так: в атрибуте [DataContract] установите свойство Namespace, в любую строку. И свойство Name, в строку с именем этого типа.
А в атрибуте [DataMember] установите свойство Name в имя этого свойства (или поля). Потом скомпилируйте, обновите ссылку на службу из клиента и сделайте вызов. И сделайте скрин, как тот что №1.
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 20:51  [ТС]
insite2012, Да все ровно ошибку кидает, даже если привожу к нужному типу (хоть они по сути и так есть этого типа) получаю тоже самое, это какой-то мазохизм:
Миниатюры
Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 21:00
Да не тот это тип, вы понимаете? У вас типы разные, понимаете! Вы клиенту отправляете совершенно не то, что он ожидает получить. Вы сделали как я сказал ранее?
Цитата Сообщение от insite2012 Посмотреть сообщение
Попробуйте сделать для начала так: в атрибуте [DataContract] установите свойство Namespace, в любую строку. И свойство Name, в строку с именем этого типа.
А в атрибуте [DataMember] установите свойство Name в имя этого свойства (или поля). Потом скомпилируйте, обновите ссылку на службу из клиента и сделайте вызов. И сделайте скрин, как тот что №1.
Добавлено через 4 минуты
Midian, если так не заведется, то тогда посмотрите в сторону вам нужно два набора моделей (для EF и для WCF) и маппить одну на другую.
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 21:05  [ТС]
insite2012, Вот что сделал, ошибка та же:
Миниатюры
Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)   Ошибка чтения данных из сокета (WCF + EF + WPF + MVVM)  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 21:06
Цитата Сообщение от Midian Посмотреть сообщение
Вот что сделал, ошибка та же:
Ну тогда, для начала (чтобы удостоверится в моем выводе) вручную преобразуйте в цикле все объекты из одного типа в другой.
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 21:37  [ТС]
insite2012, Делал выше, не помогло
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 21:40
Цитата Сообщение от Midian Посмотреть сообщение
Делал выше
Тогда, если не жаль времени и хочется понять, попробуйте работать с БД не через EF, а напрямую через ADO.NET. Сформируйте коллекцию и передавайте. Более чем уверен что все заработает.
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 21:46  [ТС]
insite2012, Мне нужно именно через EF
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
02.11.2017, 21:53
Цитата Сообщение от Midian Посмотреть сообщение
Мне нужно именно через EF
Посмотрите в сторону AutoMapper, который то, что вы получили из БД (через EF) маппить уже в нужные объекты.
0
 Аватар для Midian
608 / 390 / 198
Регистрация: 31.03.2013
Сообщений: 2,697
02.11.2017, 22:06  [ТС]
insite2012, В любом случае спасибо за помощь, буду дальше думать что за подводные камни
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2017, 22:06
Помогаю со студенческими работами здесь

WPF команды и MVVM. Часть 1. [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html Для использования и создания WPF команд в Net предусмотрен...

Чтения числа из сокета
Здравствуйте, есть такой код: /// &lt;summary&gt; /// Завершает асинхронный прием сообщения от клиенского сокета ...

WPF команды и MVVM. Часть 2. Всплытие команд. Реализация команды для списка элементов [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html На практике часто встречаются случаи когда команда и кнопка...

Закрыть поток с бесконечным циклом чтения из сокета
Добрый день ! Подскажите как правильно закрыть поток . А то иногда проскакивает исключение при закрытии потока. ...

Как сделать проект Silverlight (MVVM) с WCF (желательно пример кода)
Здраствуйте!Не знал в каком разделе написать этот вопрос или в Silverlight, или в WCF так как вопрос касаеться 2х темы. У меня есть почти...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru