powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / c# wcf передать класс из сервиса клиенту
39 сообщений из 39, показаны все 2 страниц
c# wcf передать класс из сервиса клиенту
    #39772217
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Уважаемые гуру, подскажите пожалуйста, правильно ли я оцениваю возможности 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
c# wcf передать класс из сервиса клиенту
    #39772224
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechtoи как её передать клиенту не могу себе представитьИзучай вопрос сериализации и десериализации.
Естественно, ты не можешь передать объект из домена в домен, не выполняя сериализацию.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772235
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Оно?

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

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

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

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

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

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

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

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

Простая схема:
"Сборка ядра" - содержит в себе интерфейсы, которые используются "Сборкой сервиса" и "Сборкой клиента"
"Сборка сервиса" - при запросе от клиента, инициализирует класс и отправляет его клиенту
"Сборка клиента" - клиент получает класс и работает с ним через интерфейс.
Ты это сам придумал?
Это делали (передача абстрактного базового класса или интерфейса) в прошлом веке в дельфи. Еще когда Net не было.
Для плагинов.
Брось фигней страдать.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772355
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Для плагинов.Ну да, фактически автор и пытается создать плагин. Так что надо его отправить читать, как делают плагины в .NET
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772372
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
Ну дак это динамика.
А я ее не люблю)).
Поэтому ТС к тебе.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772653
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
c# wcf передать класс из сервиса клиенту
    #39772660
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto, я люблю динамику и универсальность. Не знаю плюс это или минус, но мнения расходятся):для динамике должны быть обоснования. Для статики не нужны, есть ГОСТ.
Убедил?
2. WCF это soap и стандарт.
Связи и наследование не передается.
Убедил?
Если нет, то ты верующий и не лечится.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772696
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoЯ не понимаю одного, то что я хочу это можно реализовать через Wcf или нет? Просто не хочется копать и в итоге напороться на камень.
1) Через Wcf можно передать данные
2) Сборка - это просто набор бинарных данных, запакуй dll в base64 и передавай (ну или какие там способы передачи бинарников в wcf из коробки?)

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

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

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

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

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

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

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

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

Мне вот интересно, если бы у Вас была подобная задача. Вы бы каким путем пошли?
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772789
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoWcf задействовать как шлюз для обновления (передача бинарного набора, сборки dll).расшаренная папка или ftp быстрее.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772790
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechtoесли бы у Вас была подобная задача.задачи по ГОСТ по функционалу не было. Была хотелка программиста. Не ФУНКЦИОНАЛ.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772791
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoGAC как вариант для хранения, сборок.насколько знаю, эта штука опять не для юзверей, а для прогеров.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772803
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoВыходит не получается мне обойтись без хранения сборки dll на клиенте. Все равно их приходится скачивать на клиент и потом с ними работать. Печально :(Блин, ты второй день пытаешь понять, что код выполняется в домене, а не в хлебнице и не в луже на улице? Это просто настолько очевидно для человека, который не первый день пишет на шарпе, что и в голову не пришло тебе сразу об этом сказать, извини.

NechtoМне вот интересно, если бы у Вас была подобная задача. Вы бы каким путем пошли?Эта задача была не только у меня, а у тысяч людей. Называется она ПЛАГИНЫ. Есть куча способов работы с ними, просто почитай литературу. Но в конечном итоге, очевидно, плагин выполняется в домене, он не может выполняться где-то еще.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772804
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123NechtoGAC как вариант для хранения, сборок.насколько знаю, эта штука опять не для юзверей, а для прогеров.Ну, скажем, я это привел больше для иллюстрации
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772819
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechtoнужно передать класс целиком (со всеми свойствами, методами, наследованиями, using-ми и др.).
Любителю динамики:
авторErlang [ˈɜːlæŋ][3] — функциональный язык программирования с сильной динамической типизацией, предназначенный для создания распределённых вычислительных систем. Разработан и поддерживается компанией Ericsson. Язык включает в себя средства порождения параллельных легковесных процессов и их взаимодействия через обмен асинхронными сообщениями в соответствии с моделью акторов.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772845
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProNechtoВыходит не получается мне обойтись без хранения сборки dll на клиенте. Все равно их приходится скачивать на клиент и потом с ними работать. Печально :(Блин, ты второй день пытаешь понять, что код выполняется в домене, а не в хлебнице и не в луже на улице? Это просто настолько очевидно для человека, который не первый день пишет на шарпе, что и в голову не пришло тебе сразу об этом сказать, извини.

NechtoМне вот интересно, если бы у Вас была подобная задача. Вы бы каким путем пошли?Эта задача была не только у меня, а у тысяч людей. Называется она ПЛАГИНЫ. Есть куча способов работы с ними, просто почитай литературу. Но в конечном итоге, очевидно, плагин выполняется в домене, он не может выполняться где-то еще.

Извините меня, если вам мои вопросы показались глупыми. Но мне нужно было убедиться в своих суждениях (могу ли я обойтись без добавления в домен и не хранить сборки на клиенте), как выяснилось нет, и вы мне помогли это сделать. Спасибо!
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772846
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechtoмогу ли я обойтись без добавления в домен и не хранить сборки на клиентеМне просто на самом деле любопытно, какова была в твоем представлении альтернатива, как выполнять код, который не находится на клиенте (а находится где? и в каком контексте выполняется?)
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772847
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Nechtoнужно передать класс целиком (со всеми свойствами, методами, наследованиями, using-ми и др.).
Любителю динамики:
авторErlang [ˈɜːlæŋ][3] — функциональный язык программирования с сильной динамической типизацией, предназначенный для создания распределённых вычислительных систем. Разработан и поддерживается компанией Ericsson. Язык включает в себя средства порождения параллельных легковесных процессов и их взаимодействия через обмен асинхронными сообщениями в соответствии с моделью акторов.

Не не, лучше c# или java
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772853
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto,
Странный ты. Там один ответ с одним +1.
Нашел мнение, да совсем по другому вопросу.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772879
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Nechto,
Странный ты. Там один ответ с одним +1.
Нашел мнение, да совсем по другому вопросу.
Да не странный, просто первую попавшую ссылку приложил, прочитав заголовок. Ну да ладно с этой ссылкой.
Вот зачем, вы мне предлагаете этот язык программирования, если использую и изучаю c#?
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772898
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto,
Можно пойти на врача, а мечтать о динамике, тьфу, петь песни.
Вот я вам и дал ссылку.
Вас с динамикой, не много в шарпе на самом деле. Терпи.
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39772950
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Nechto, сегодня, 13:32 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1308939&msg=21807332][21807332]
>Выходит не получается мне обойтись … Вы бы каким путем пошли?
<Вам надо создать хотя-бы одно реальное приложение на C#, оценить его компоненты и, думаю, желание таскать отдельные классы откуда-то на клиента отпадет само-собой. Для примера приведу цифири конкретного одностраничного WPF приложения:
1. Обслуживает 18 таблиц MS SQL - SELECT, INSERT, UPDATE и DELETE.
2. 1 главная страница MainWindow.xaml
3. 29 панелей (UserControl) реализуют графический интерфейс для (1), включая работу с документами Word и графическими файлами.
Бинарный вариант приложения занимает 916 Кбайт в папке диска, из них wpf_ИнспекцииВД.pdb (описание графических компонент) - 551 Кбайт. Иными словами, собственно рабочий код на C# - компактен, заниматься одним классом не имеет смысла, заниматься - так приложением в целом. Привожу и сжатый вариант приложения в .rar контейнере - 164 Кбайт:
...
Рейтинг: 0 / 0
c# wcf передать класс из сервиса клиенту
    #39773512
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoPetro123Nechto,
Странный ты. Там один ответ с одним +1.
Нашел мнение, да совсем по другому вопросу.
Да не странный, просто первую попавшую ссылку приложил, прочитав заголовок. Ну да ладно с этой ссылкой.
Вот зачем , вы мне предлагаете этот язык программирования, если использую и изучаю c#?

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


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