Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Веб-сервисы и WCF
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
drondez
44 / 44 / 32
Регистрация: 15.04.2011
Сообщений: 187
1

В чём причина ошибки при передаче данных?

11.09.2015, 12:29. Просмотров 959. Ответов 3
Метки нет (Все метки)

В общем есть сервис и клиент все работает нормально на простых данных. Требуется передать список интерфейсов. Указал KnownType все вроде хорошо, однако не работает:

C#
1
2
3
4
5
6
7
public object GetSensors()
        {
            
            return mainWindow.wirelessStationServerList[0].GetSensors(); //вызов идет через список интерфейсов wirelessStationServerList
            //return GetSensor();     
           
        }
C#
1
2
3
4
5
6
7
8
public List<ISensor> GetSensors() //сам метод возвращающий список
        {
            List<ISensor> l = new List<ISensor>();
            l.Add(new SensorDef());
            l.Add(new SensorInc());
            l.Add(new SensorWet());
            return l;
        }
В данном случае не работает, однако в таком случае все работает на ура:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public object GetSensors()
        {
            
           // return mainWindow.wirelessStationServerList[0].GetSensors();
            return GetSensor(); //код метода ниже
           
        }
        public List<ISensor> GetSensor() //точно такой же метод как выше, только объявленный прямо в классе сервиса
        {
            List<ISensor> l = new List<ISensor>();
            l.Add(new SensorDef());
            l.Add(new SensorInc());
            l.Add(new SensorWet());
            return l;
        }
Текст ошибки на клиенте, как будто не может десериализовать.
C#
1
Подключение к сокету было прервано. Возможно, это вызвано ошибкой обработки сообщения, превышением времени ожидания на удаленном узле или проблемой с выделенным сетевым ресурсом. Тайм-аут локального сокета: "00:00:59.9569976".
Код метода "GetSensors()" идентичен, только в 1м случае объявлен в другом классе и доступ через интерфейс к нему, а во втором объявлен прямо в классе сервиса... не могу понять в чем дело
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2015, 12:29
Ответы с готовыми решениями:

Ошибка при передаче данных в GridView
Среда: WPF Ошибка: Произошла ошибка базового поставщика в Open. Код: private void...

Потеря данных при передаче по TCP
Система сложная, отслеживает и записывает все происходящее. В итоге получается вот что: сервер...

Ошибка при передаче данных в клиент-серверном приложении
Здравствуйте, вот код клиент-серверного приложения: Клиент: private void button1_Click(object...

При передаче post запроса через прокси сервер в ответ приходят ошибки с прокси сервера
При передаче post запроса через прокси сервер в ответ прилетают ошибки с прокси сервера:...

Некорректное отображение кириллицы при передаче данных от сервера клиенту
Здравствуйте. ПИшу проект, в котором нужно передавать текст от сервера к клиенту и наоборот....

3
StudAssistant
Эксперт
34811 / 27003 / 5019
Регистрация: 17.04.2006
Сообщений: 49,622
11.09.2015, 12:29
Закажите контрольную, курсовую, диплом или любую другую студенческую работу здесь.
3
insite2012
Модератор
Эксперт .NET
4890 / 3842 / 1097
Регистрация: 12.10.2013
Сообщений: 11,101
Записей в блоге: 2
11.09.2015, 13:53 2
Цитата Сообщение от drondez Посмотреть сообщение
Указал KnownType
Насколько я помню, вам нужно не это, а ServiceKnownType. И желательно переработать импортированное определение на стороне клиента, для добавления интерфейса контракта данных.
Подробнее посмотрите у Джувела Леве, 112 страница.
0
drondez
44 / 44 / 32
Регистрация: 15.04.2011
Сообщений: 187
11.09.2015, 13:56  [ТС] 3
insite2012, Ну я ServiceKnownType и имел в виду, вот у меня все указано
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 [ServiceContract]
    [ServiceKnownType(typeof(SensorDef))]
    [ServiceKnownType(typeof(SensorInc))]
    [ServiceKnownType(typeof(SensorWet))]
    [ServiceKnownType(typeof(List<ISensor>))]
  
    public interface IMonitoringServer
    {
 
        [OperationContract]
        object GetSensors();
       
    }
в любом случае в 1м варианте не работает а во втором работает, поменялось только место из котоого вызван метод

C#
1
2
3
4
5
6
7
8
public List<ISensor> GetSensors() //сам метод возвращающий список
        {
            List<ISensor> l = new List<ISensor>();
            l.Add(new SensorDef());
            l.Add(new SensorInc());
            l.Add(new SensorWet());
            return l;
        }
0
drondez
44 / 44 / 32
Регистрация: 15.04.2011
Сообщений: 187
14.09.2015, 15:04  [ТС] 4
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Тему можно закрывать, как оказалось ошибка была в другом месте немного. Приложение расширяемое, и объекты грузились через Assembly.LoadFrom, и возникала неявная ошибка приведения типов т.к. LoadFrom грузил либу из каталога сборки самой либы, а WCF сервер грузил локальную копию этой либы. Прописал в LoadFrom либу из сборки сервера и все заработало=)
0
14.09.2015, 15:04
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2015, 15:04

Проблеммы при скрытом запуске дочерних окон сторонних приложений и передаче в них данных
Посоветуйте пожалуйста, как решить следующую проблемму: из основой программы стартую стороннюю...

Причина ошибки
Здравствуйте! Нужны идеи по поводу возникновения ошибки в следующем классе: 13 строка -...

Не понимаю, в чём причина ошибки
Помоги с решение и объясните проблему, справа в файле как должно выглядеть, но не получается так...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru