powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / c# wcf передать класс из сервиса клиенту
25 сообщений из 39, страница 1 из 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
25 сообщений из 39, страница 1 из 2
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / c# wcf передать класс из сервиса клиенту
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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