Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы, WCF
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 2
Регистрация: 23.02.2013
Сообщений: 79

WCF + EF + ASP.NET MVC. Как передавать связанные данные?

24.03.2014, 23:51. Показов 2618. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Совсем недавно начал разбираться в WCF.
Есть две модели
C#
1
2
3
4
5
6
7
8
9
10
11
12
 [DataContract]
    public class Telephone
    {
        [DataMember]
        public int TelephoneId { get; set; }
        [DataMember]
        public int Number { get; set; }
        [DataMember]
        public int ContactId { get; set; }
        [DataMember]
        public Contact Contact { get; set; }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
    [DataContract]
    public class Contact
    {
        [DataMember]
        public int ContactId { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Address { get; set; }
        [DataMember]
        public ICollection<Telephone> Telephone { get; set; }
    }
Использую их для EF и WCF.

C#
1
2
3
4
5
   public class ContactsContext:DbContext
    {
        public DbSet<Contact> Contacts { get; set; }
        public DbSet<Telephone> Telephones { get; set; }
    }
Реализация сервиса

C#
1
2
3
4
5
6
7
8
9
10
11
12
  public class ServiceContacts : IServiceContacts
    {
        ContactsContext contactContext;
        public IQueryable<Contact> GetAllContact()
        {
            contactContext = new ContactsContext();
 
            var contacts = contactContext.Contacts.Where(m => m.ContactId > -1);
            
            return contacts;
        }
   }
Пытаюсь вызвать этот метод в контроллере

C#
1
2
3
4
5
6
   public ActionResult Index()
        {
            var service = new ServiceReference1.ServiceContactsClient();
            var contacts=service.GetAllContact();
            return View(contacts);
        }
И каким-то неведомым для меня образом GetAllContact() возвращает ServiceReference1.Contact[], а не IQueryable<Contact>. С чем это связано и как мне вывести данные из зависимой таблицы (Telephones)?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2014, 23:51
Ответы с готовыми решениями:

Нужны статьи или примеры связки технологий WCF, ASP.NET MVC и SQL Server
Здравствуйте! Я совершенно не разбираюсь в WCF, а надо уже готовить диплом. Не могли бы вы посоветовать хорошие статейки или примеры связки...

WCF в ASP.NET
Доброго времени суток. Задача следующая. Надо сделать что бы служба, которая находится на сайте asp.net оповещала клиентов, которые...

WCF RESTful или ASP.NET Web Application
Доброго времени суток. По наследству достался сервис реализованный как ASP.NET Web Application. Между клиентом и сервером ходят JSON...

4
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
25.03.2014, 00:07
Лучший ответ Сообщение было отмечено wkololo_4ever как решение

Решение

а каким образом по вашему будет обрабатываться IQueryable по WCF? каждый ваш Where отправлять обратно сервису чтобы он обработал это в базе? нет, так не пойдет

вы можете передавать стандартные структуры данных
массив - стандартная структура данных, присутствующая во всех языках
IQueryable - нет

переделайте метод так, чтобы он возвращал массив

чтобы возвращал связанные данные - вытащите их в вашем запросе через Include
ваш метод должен выглядеть так (_включая_ dispose коннекта к базе!)

C#
1
2
3
4
5
        public Contact[] GetAllContact()
        {
          using(var contactContext = new ContactsContext();
                return contactContext.Contacts.Include(x=>x.Telephone).Where(m => m.ContactId > -1).ToArray();
        }
1
0 / 0 / 2
Регистрация: 23.02.2013
Сообщений: 79
25.03.2014, 00:39  [ТС]
Спасибо, данные стали выходить как нужно, но теперь на этапе возвращения массива в контроллер
C#
1
var contacts=service.GetAllContact();
выходит ошибка "Удаленный хост принудительно разорвал существующее подключение" С чем связанна она?
0
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
25.03.2014, 00:48
уверены ли вы, что вы не пытаетесь вернуть _слишком_ много данных?
возможно они не влазят в ограничение по объему переданных данных, или время возвращения их из базы превышает таймаут?

судя по коду вы пытаетесь вернуть всю таблицу, вы точно уверены в том, что объем передаваемых данных нельзя сократить?

Добавлено через 4 минуты
посмотрел ваш код, возможно проблема в сериализации - когда вы возвращаете контакты для каждого контакта формируется коллекция телефонов, для каждого из которых сериализуется объект контакта, в каждом из которых есть коллекция телефонов....

вероятно данную структуру просто не получается корректно сериализовать (т.к. они ссылаются друг на друга)

я бы попробовал убрать атрибут DataMember с поля Contact класса Telephone

если эта связь нужна на стороне сервера ее будет легко восстановить
2
0 / 0 / 2
Регистрация: 23.02.2013
Сообщений: 79
25.03.2014, 01:01  [ТС]
Цитата Сообщение от Tessen Посмотреть сообщение
я бы попробовал убрать атрибут DataMember с поля Contact класса Telephone
да, это помогло, большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2014, 01:01
Помогаю со студенческими работами здесь

Сайт на MVC: как задействовать службу WCF
Здравствуйте. Пишу сайт на MVC и нужно задействовать службу WCF но ума не приложу как это сделать. xhr.open('GET',...

События и новости связанные с ASP.NET MVC
Поздравляю всех разработчиков с выходом ASP.NET MVC 3.0 RTM (с новым продуктом Nuget, кто не знает что это такое - советую почитать), CMS...

ASP.NET MVC 4,ASP.NET MVC 4.5 и ASP.NET MVC 5 большая ли разница между ними?
Начал во всю осваивать технологию,теперь хочу с книжкой посидеть и вдумчиво перебрать всё то что увидел,услышал и набил...в общем какую...

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

как хранить данные сессии в ASP.Net MVC?
Доброго времени суток. Возможно вопрос покажется непомерно тупым, но все же. Необходимо реализовать что-то наподобие корзины покупателя....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru