powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / общий класс у Web Service и клиента
19 сообщений из 19, страница 1 из 1
общий класс у Web Service и клиента
    #35937549
Фотография pion3r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
Есть ASP Web Service и WinForms приложение. Например на сервайсе есть классы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
class Car
{
     private Int32 id;
     public Int32 ID
     {
         get
         {
             return id;
         }
         set
         {
             id = value;
         }
     }
     private String name;
     public String Name
     {
         get
         {
             return name;
         }
         set
         {
             name = value;
         }
     }
}

class Cars 
{
    public List<Car> listOfCars;
    public Cars()
    {
        //---------- реализация и тд..
    }
}

эти же классы есть и на клиентском приложении. Возможно ли как то сделать что бы когда я прогруженный данными обьект типа Cars полученый с сервера, просто взял и присвоил локальному обьекту также типа Cars. Заранее благодарен.
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35937552
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это называется DataContract
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947488
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pion3r,

Можно через конструктор:

В описании контракта:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[DataContract]
public class CarWS
{
  [DataMember]
  public int ID;
}

public class CarsWS
{
  [DataMember]
  public List<CarWS> listOfCars;
}

На клиенте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class Car
{
  public Car(CarWS carWS)
  {
    this.ID = carWS.ID;
  }
  public int ID {get; private set;}
}

public class Cars
{
  public Cars(CarsWS carsWS)
  {
    Cars = new List<Car>();
    foreach(CarWS carWS in carsWS)
      Cars.Add(new Car(carWS));
  }
  public List<Car> Cars;
}


Ну и далее в коде:
Код: plaintext
1.
2.
3.
4.
void CarsReceivedFromWS(CarsWS carsWS)
{
  Cars cars = new Cars(carsWS);
  ...
}
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947550
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в WCF такое можно сделать, в вебсервисах - только так как показал Roman S. Golubin
переходите на WCF
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947587
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatman,

Собственно, я для WCF и показал :) У вас какой-то другой вариант есть? Делитесь.
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947609
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть. при добавлении сервис референс в адвансед галочка - reuse types in referenced assemblies, ну и референсы на сборку с типами. тогда компилятор везде подставляет типы, которые в самой сборке
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947624
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatman,

хмм... добавление сервис референс... излишняя процедура, создающая кучу (в 90% случаев) неюзабельного в дальнейшем кода... имхо.
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947650
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, в случае установки этой галочки, кода становится в разы меньше
глянуть сейчас не могу, но если не ошибаюсь, у меня генерилось по 1 или 2 файла на каждый сервис, файлы назвать большими я не могу. другое дело что при обновлениях референсов могут добавляться новые файлы, в то время как старые перестают использоваться. но тут нужно просто почистить папку с референсами (я обычно просто удаляю всё и пересоздаю их)
а главное - руками писать ничего не нужно, просто создал прокси-класс и вызвал метод, передав нужный класс.
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947683
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatman,

руками писать не нужно - это как? Как минимум, генерилка тогда должна знать какие локальные классы (и как) на классы контрактов отражать, иначе может такого нагенерить.
Или мы о разных вещах говорим? Если речь идет о повторном использовании одного и того же класса контракта, то все просто - вынести контракты в отдельную сборку и подключать ее и к серверному и к клиентскому коду.
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947720
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так в том то и дело, что используются одни и те же классы что на сервисе, что на клиенте.
т.е. если есть сервис возвращает SomeType, то и на клиенте мы получаем сразу же именно этот SomeType, а не SomeTypeWS, сгенеренный при добавлении сервис
MSDN
MSDNWhen a service reference is added to a project, any types defined in the service are generated in the local project. In many cases, this creates duplicate types when a service uses common .NET Framework types or when types are defined in a shared library.
To avoid this problem.......
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947730
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. классы не генерятся, а используется то что есть.
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947741
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, сейчас присмотрелся к коду, который Вы привели выше. я правильно понял, что сборка, содержащая Car имеет ссылку на веб-сервис? и при это сам веб-сервис имеет ссылку на сборку, содержащую Car, т.к. он использует его внутри своих методов?
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947749
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatman,

Хм... а я по наивности просто сборку с контрактами подключаю и получаю теже самые классы, что и в сборке контрактов, но они мне не нужны, так как на сервере и на клиенте у них в 90% случаев разная функциональность. Поэтому я из них в локальные классы данные и перекладываю А у вас с генерилкой, оказывается, проблема обратная - как из нагенеренных классов в классы контракта данные переложить ;-D
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947766
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatmanкстати, сейчас присмотрелся к коду, который Вы привели выше. я правильно понял, что сборка, содержащая Car имеет ссылку на веб-сервис? и при это сам веб-сервис имеет ссылку на сборку, содержащую Car, т.к. он использует его внутри своих методов?

Имеем: сборка с датаконтрактами, сервис со ссылкой на сборку с контрактами, клиента со ссылкой на сборку с контрактами.
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947797
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman S. GolubinА у вас с генерилкой, оказывается, проблема обратная - как из нагенеренных классов в классы контракта данные переложить ;-Dну так проблемы собственно никакой нет. везде используются одни и те же классы. удобно, имеем одинаковую бизнес логику и на сервисе, и на клиенте. как следствие, что можно сделать на клиенте, делается на нём, и нет никаких накладных издержек на запрос к сервису.
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947802
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman S. GolubinGatmanкстати, сейчас присмотрелся к коду, который Вы привели выше. я правильно понял, что сборка, содержащая Car имеет ссылку на веб-сервис? и при это сам веб-сервис имеет ссылку на сборку, содержащую Car, т.к. он использует его внутри своих методов?

Имеем: сборка с датаконтрактами, сервис со ссылкой на сборку с контрактами, клиента со ссылкой на сборку с контрактами.т.е. у Вас логика на клиенте?
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947828
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatman,

на сервере своя логика, на клиенте своя. На клиенте логика по отображению данных - синхронизация контекстов с UI и т.п., на сервере логика по обработке данных :) А в датаконтракте какая логика? Там ни какой логики - только данные для передачи между сервером и клиентом. Поэтому на клиенте и приходится мапить классы контракта в классы клиента.
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947845
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а попробуйте как я писал, Вам понравится, ничего мапить не надо. и аттрибуты типа DataContract и DataObject тоже можно не использовать, WCF хватает если класс помечен как XmlSerializable
...
Рейтинг: 0 / 0
общий класс у Web Service и клиента
    #35947887
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatman,

да нет, спасибо, я лучше по старинке - ручками без генераторов - точно знаешь, что получится в итоге, в отличие от :)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / общий класс у Web Service и клиента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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