Гость
Map
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / c# wcf передать класс из сервиса клиенту / 25 сообщений из 39, страница 1 из 2
11.02.2019, 13:44
    #39772217
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Добрый день!
Уважаемые гуру, подскажите пожалуйста, правильно ли я оцениваю возможности Wcf в области обмена данными сервис-клиент.

Сервис возвращает клиенту, тип object содержащий ссылку на класс:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
[DataContract]
// интерфейс IRouter находится в общедоступной библиотеке для сервиса и клиента
public class A : IRouter;
public class C : IRouter;
...
public class X : IRouter;

public class DataRouter
{
    [DataMember]
    public string TypeName {get; set;}
    [DataMember]
    public object Router {get; set;} // или так public IRouter Router {get; set;}  
}

public class Service : IService
{
    public DataRouter GetRouter()
    {
        return new DataRouter {TypeName = 'Custom class', new A()} //A - ссылка на класс
    }
}



Просто я пришел к такому выводу, что нельзя. По ряду причин:
1. Формат обмена данными происходит в XML
2. Ссылка на класс создаётся в куче сервера, и как её передать клиенту не могу себе представить

Вот и решил спросить у аудитории.
...
Рейтинг: 0 / 0
11.02.2019, 13:50
    #39772224
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Nechtoи как её передать клиенту не могу себе представитьИзучай вопрос сериализации и десериализации.
Естественно, ты не можешь передать объект из домена в домен, не выполняя сериализацию.
...
Рейтинг: 0 / 0
11.02.2019, 14:00
    #39772235
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Shocker.Pro,
Оно?

Все равно не могу понять. Ведь все равно нужно передать класс целиком (со всеми свойствами, методами, наследованиями, using-ми и др.). Разве можно это сделать в формате XML?
...
Рейтинг: 0 / 0
11.02.2019, 14:03
    #39772236
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Nechto,
Убери интерфейсы и не говори слово ссылка. Просто передай класс.
Всё
...
Рейтинг: 0 / 0
11.02.2019, 14:04
    #39772238
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Nechto
Код: c#
1.
// интерфейс IRouter находится в общедоступной библиотеке для сервиса и клиента

это не надо
...
Рейтинг: 0 / 0
11.02.2019, 14:05
    #39772239
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Nechtoкласс целиком нет. Там помечается что передать.
...
Рейтинг: 0 / 0
11.02.2019, 14:11
    #39772245
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Petro123Nechto,
Убери интерфейсы и не говори слово ссылка. Просто передай класс.
Всё

Такой способ передачи работает успешно, я проверял. Мне то нужно понять можно ли передать класс при помощи базового типа object или наследованием IRouter. Хотя наследование IRouter выполняется в любом случае.
...
Рейтинг: 0 / 0
11.02.2019, 14:17
    #39772253
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
NechtoВедь все равно нужно передать класс целиком (со всеми свойствами, методами, наследованиями, using-ми и др.)Причем тут методы и т.п.? WCF передает данные, а не код. Если тебе нужно передавать код - ну запакуй dll-ку, передай ее на клиент, там распакуй, загрузи в домен и используй.
Задача неясна.
...
Рейтинг: 0 / 0
11.02.2019, 14:19
    #39772255
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Nechtoработает успешно, я проверял. Мне то нужновам нужно не как у всех.
ОК

NechtoМне то нужно понять можно ли передать класс при помощи базового типа object или наследованием IRouter.
Можно ли сделать сложнее?))))
Мне трудно отвечать на такой вопрос. Он не имеет цели.
...
Рейтинг: 0 / 0
11.02.2019, 14:20
    #39772256
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Shocker.ProNechtoВедь все равно нужно передать класс целиком (со всеми свойствами, методами, наследованиями, using-ми и др.)Причем тут методы и т.п.? WCF передает данные, а не код. Если тебе нужно передавать код - ну запакуй dll-ку, передай ее на клиент, там распакуй, загрузи в домен и используй.
Задача неясна.

Подождите, попробую кратно разъяснить задачу!
...
Рейтинг: 0 / 0
11.02.2019, 14:21
    #39772257
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Nechtoпопробую кратно разъяснить задачу!и не забудь что в soap ЯП разный сервера и клиента.
...
Рейтинг: 0 / 0
11.02.2019, 15:38
    #39772317
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Буду исходить из того, что обсуждалось выше в дебри лезьте не буду.

Нужно создать сервис, который будет раздавать страницы(классы) клиентам. Сами страницы и модели хранятся в сборках на сервере.

Простая схема:
"Сборка ядра" - содержит в себе интерфейсы, которые используются "Сборкой сервиса" и "Сборкой клиента"
"Сборка сервиса" - при запросе от клиента, инициализирует класс и отправляет его клиенту
"Сборка клиента" - клиент получает класс и работает с ним через интерфейс.
...
Рейтинг: 0 / 0
11.02.2019, 15:46
    #39772328
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
То есть на этапе компиляции клиент ничего не знает о тех интерфейсах, с которыми ему предстоит работать. Таким образом, он сможет с ними работать только через рефлексию.
...
Рейтинг: 0 / 0
11.02.2019, 15:50
    #39772332
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Shocker.ProТо есть на этапе компиляции клиент ничего не знает о тех интерфейсах, с которыми ему предстоит работать. Таким образом, он сможет с ними работать только через рефлексию.
Да, они скомпилированы отдельно, единственное что их связывает это интерфейсы в "сборке ядра"
...
Рейтинг: 0 / 0
11.02.2019, 15:56
    #39772336
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Тогда в чем вопрос, не очень понятно. Получил сборку, загрузил ее в домен, работаешь с ней через интерфейсы. Причем тут WCF?
...
Рейтинг: 0 / 0
11.02.2019, 16:09
    #39772344
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
NechtoБуду исходить из того, что обсуждалось выше в дебри лезьте не буду.

Нужно создать сервис, который будет раздавать страницы(классы) клиентам. Сами страницы и модели хранятся в сборках на сервере.

Простая схема:
"Сборка ядра" - содержит в себе интерфейсы, которые используются "Сборкой сервиса" и "Сборкой клиента"
"Сборка сервиса" - при запросе от клиента, инициализирует класс и отправляет его клиенту
"Сборка клиента" - клиент получает класс и работает с ним через интерфейс.
Ты это сам придумал?
Это делали (передача абстрактного базового класса или интерфейса) в прошлом веке в дельфи. Еще когда Net не было.
Для плагинов.
Брось фигней страдать.
...
Рейтинг: 0 / 0
11.02.2019, 16:16
    #39772355
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Petro123Для плагинов.Ну да, фактически автор и пытается создать плагин. Так что надо его отправить читать, как делают плагины в .NET
...
Рейтинг: 0 / 0
11.02.2019, 16:33
    #39772372
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Shocker.Pro,
Ну дак это динамика.
А я ее не люблю)).
Поэтому ТС к тебе.
...
Рейтинг: 0 / 0
12.02.2019, 10:37
    #39772653
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Petro123Ты это сам придумал?
Это делали (передача абстрактного базового класса или интерфейса) в прошлом веке в дельфи. Еще когда Net не было.
Для плагинов.
Брось фигней страдать. Да сам, исходя из своих соображений. Дело в том, что я давно подумываю как мне в моих приложениях, реализовать следующие задачи (Как вы заметили, я люблю динамику и универсальность. Не знаю плюс это или минус, но мнения расходятся):
1. Обновление в реал тайме.
Если в wcf, все таки есть способ передать клиенту класс, о котором клиент нечего не знает и работать с ним исключительно через интерфейс. То обновление отпадет само по себе, так как клиент берет логику с сервера.
Если не wcf, то придется вернуться к варианту реализации через appdomain.

2. Повышает уровень безопасности и упрощает администрирование.
Так как код, лежит на сервере, пользователь не имеет доступа к библиотекам напрямую.
Shocker.Proтолько через рефлексию
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
[DataContract]
[KnownType(typeof(A))]
public class DataRouter
{
    [DataMember]
    public string TypeName {get; set;}
    [DataMember]
    public object Router {get; set;} // или так public IRouter Router {get; set;}  
}

public class A : IRouter 
{
    public int Id { get; set; }
    public int GetId () { return Id; }
}



Я не понимаю одного, то что я хочу это можно реализовать через Wcf или нет? Просто не хочется копать и в итоге напороться на камень.
...
Рейтинг: 0 / 0
12.02.2019, 10:44
    #39772660
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Nechto, я люблю динамику и универсальность. Не знаю плюс это или минус, но мнения расходятся):для динамике должны быть обоснования. Для статики не нужны, есть ГОСТ.
Убедил?
2. WCF это soap и стандарт.
Связи и наследование не передается.
Убедил?
Если нет, то ты верующий и не лечится.
...
Рейтинг: 0 / 0
12.02.2019, 11:34
    #39772696
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
NechtoЯ не понимаю одного, то что я хочу это можно реализовать через Wcf или нет? Просто не хочется копать и в итоге напороться на камень.
1) Через Wcf можно передать данные
2) Сборка - это просто набор бинарных данных, запакуй dll в base64 и передавай (ну или какие там способы передачи бинарников в wcf из коробки?)

То есть wcf тут только как протокол, с тем же успехом можешь хоть из БД получать сборку через sql-коннектор - ничего не меняется
...
Рейтинг: 0 / 0
12.02.2019, 13:05
    #39772772
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Petro123Nechto, я люблю динамику и универсальность. Не знаю плюс это или минус, но мнения расходятся):для динамике должны быть обоснования. Для статики не нужны, есть ГОСТ.
Убедил?
2. WCF это soap и стандарт.
Связи и наследование не передается.
Убедил?
Если нет, то ты верующий и не лечится.Убедили, возразить не чем.

Shocker.ProNechtoЯ не понимаю одного, то что я хочу это можно реализовать через Wcf или нет? Просто не хочется копать и в итоге напороться на камень.
1) Через Wcf можно передать данные
2) Сборка - это просто набор бинарных данных, запакуй dll в base64 и передавай (ну или какие там способы передачи бинарников в wcf из коробки?)

То есть wcf тут только как протокол, с тем же успехом можешь хоть из БД получать сборку через sql-коннектор - ничего не меняется
Выходит, что передачу можно сделать, через стандартный тип byte[].
Только вот интересно, к примеру клиент получил массив бинарников и как работать с ними? Сохранять локально и потом грузить в appdomain? Или можно на лету из них извлечь необходимые классы?

Да и вообще, скорость работы этого схемы будет наверное тормознутая.
...
Рейтинг: 0 / 0
12.02.2019, 13:13
    #39772778
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
NechtoСохранять локально и потом грузить в appdomain? Или можно на лету из них извлечь необходимые классы?Что значит "извлечь классы"? Ты собираешься запускать код. У тебя не получится запустить код, не загружая его в домен.

NechtoДа и вообще, скорость работы этого схемы будет наверное тормознутая.С чего вдруг? Что тут будет тормозить? Самое узкое место - это скачка плагина. Но ты его скачал один раз, дальше он у тебя лежит локально, грузишь в домен при необходимости. Можешь вообще в GAC добавить.
...
Рейтинг: 0 / 0
12.02.2019, 13:32
    #39772787
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Shocker.Proплагинаэто слово он всячески старается избегать).
А для создания распределенного сетевого кода у него скилов не хватает.
И шарп для этого не подходит.
...
Рейтинг: 0 / 0
12.02.2019, 13:32
    #39772788
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# wcf передать класс из сервиса клиенту
Shocker.ProNechtoСохранять локально и потом грузить в appdomain? Или можно на лету из них извлечь необходимые классы?Что значит "извлечь классы"? Ты собираешься запускать код. У тебя не получится запустить код, не загружая его в домен.

NechtoДа и вообще, скорость работы этого схемы будет наверное тормознутая.С чего вдруг? Что тут будет тормозить? Самое узкое место - это скачка плагина. Но ты его скачал один раз, дальше он у тебя лежит локально, грузишь в домен при необходимости. Можешь вообще в GAC добавить.

Выходит не получается мне обойтись без хранения сборки dll на клиенте. Все равно их приходится скачивать на клиент и потом с ними работать. Печально :(

Ваши рекомендации я так интерпретирую:
Wcf задействовать как шлюз для обновления (передача бинарного набора, сборки dll).
GAC как вариант для хранения, сборок.

Мне вот интересно, если бы у Вас была подобная задача. Вы бы каким путем пошли?
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / c# wcf передать класс из сервиса клиенту / 25 сообщений из 39, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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