Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF & Generics / 18 сообщений из 18, страница 1 из 1
05.08.2008, 10:29
    #35470446
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
WCF не работает с Generic типами. Т.е. метод вида
Код: plaintext
List<T> Seleсt<T>();
Т.е. WCF не может работать с заранее не определенными типами. Как кому удавалось обходить это ограничение ?
...
Рейтинг: 0 / 0
05.08.2008, 11:20
    #35470591
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
атрибут KnownType
...
Рейтинг: 0 / 0
05.08.2008, 11:35
    #35470628
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
Вот этот топик почитай. Я там несколько примеров выложил.
...
Рейтинг: 0 / 0
06.08.2008, 09:39
    #35472627
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
buredВот этот топик почитай. Я там несколько примеров выложил.

На сколько я знаю KnownType использвется при объявлении классов,структур. Попытался применить ее на класс в котором реализован метод описанный выше. Все компилируется но на ран тайм выдает ошибку :
Type 'System.Collections.Generic.List`1[T]' cannot be exported as a schema type because it is an open generic type. You can only export a generic type if all its generic parameter types are actual types.

Как же все таки обойти ? В пример твоих не нашел работы с <T>
...
Рейтинг: 0 / 0
06.08.2008, 09:45
    #35472639
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
а какая задача-то вообще?
...
Рейтинг: 0 / 0
06.08.2008, 09:50
    #35472656
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
buredа какая задача-то вообще?
Задача использовать метод вида List<T> SelectObject<T>(long id) или аналог на клиенте через WCF
...
Рейтинг: 0 / 0
06.08.2008, 09:54
    #35472669
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
В дата-контракте можно использовать Генерик, только если в сервис-контракте будет стоять конкретный тип. Вот так:

[SRC{post.srctag}]
[DataContract]
class MyClass<T>
{
[DataMember]
public T m_MyMember;
}

[ServiceContract]
interface IMyContract
{
[OperationContract]
void MyMethod(MyClass<int> obj);
}[/SRC]
...
Рейтинг: 0 / 0
06.08.2008, 09:55
    #35472672
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
Идиоты, чего они крутят этот форумный движок всё-время

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[DataContract]
class MyClass<T>
{
   [DataMember]
   public T m_MyMember;
}

[ServiceContract]
interface IMyContract
{
   [OperationContract]
   void MyMethod(MyClass<int> obj);
}
...
Рейтинг: 0 / 0
06.08.2008, 10:33
    #35472807
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
Плохо блин...
...
Рейтинг: 0 / 0
06.08.2008, 10:34
    #35472812
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
перегрузку сервис-методов можно сделать
...
Рейтинг: 0 / 0
06.08.2008, 10:36
    #35472818
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
buredперегрузку сервис-методов можно сделать

Каким образов ? Если на коротком примере рассмотреть ?
...
Рейтинг: 0 / 0
06.08.2008, 10:42
    #35472842
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
да короче не куда

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
[DataContract]
class MyClass<T>
{
   [DataMember]
   public T m_MyMember;
}

[ServiceContract]
interface IMyContract
{
   [OperationContract]
   void MyMethod(MyClass<int> obj);
[OperationContract]
   void MyMethod(MyClass<double> obj);
}
...
Рейтинг: 0 / 0
06.08.2008, 10:50
    #35472869
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
и даже так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
[DataContract]
class MyClass<T>
{
   [DataMember]
   public T m_MyMember;
}

[DataContract]
class SomeClass
{
...
}

[ServiceContract]
interface IMyContract
{
   [OperationContract]
   void MyMethod(MyClass<int> obj);
[OperationContract]
   void MyMethod(MyClass<double> obj);
[OperationContract]
   void MyMethod(MyClass<SomeClass> obj);
}
...
Рейтинг: 0 / 0
06.08.2008, 10:51
    #35472872
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
не волшебная палка конечно как ты думал, но для бытовых нужд хватит
...
Рейтинг: 0 / 0
06.08.2008, 11:10
    #35472935
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
buredда короче не куда

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
[DataContract]
class MyClass<T>
{
   [DataMember]
   public T m_MyMember;
}

[ServiceContract]
interface IMyContract
{
   [OperationContract]
   void MyMethod(MyClass<int> obj);
[OperationContract]
   void MyMethod(MyClass<double> obj);
}


Скорее всего придется уйти к тому от чего пришел...
Код: plaintext
object SelectObject(object obj)
и проверяем
Код: plaintext
if(obj is MyObject) {тра ля ля}
а так хотелось с генериками поработать...
Хотя в принципе разницы никакой...
если генерики то:
Код: plaintext
List<MyObject> o = SelectObject<MyObject>();
а если по старинке то:
Код: plaintext
List<MyObject> o = (List<MyObject>)SelectObject(new MyObject());
просто лишние преобразования.
...
Рейтинг: 0 / 0
06.08.2008, 11:25
    #35472997
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
сделайте иерархию контрактов и проставте knowntype атрибуты. А то вы сами скоро запутаетесь в своих же object-ах
...
Рейтинг: 0 / 0
06.08.2008, 11:42
    #35473063
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
buredсделайте иерархию контрактов и проставте knowntype атрибуты. А то вы сами скоро запутаетесь в своих же object-ах

С бизнес-объектами там все ясно, сейчас то проблема стоит разумной реализации методов по работе с ними через WCF.
...
Рейтинг: 0 / 0
07.08.2008, 05:42
    #35475089
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF & Generics
Громоздко, но я бы всё-таки сделал перегрузку метода для всех бизнес-объектов (если их не много), а так неизвестно сколько ошибок в рантайм вы словите на преобразованиях из object.
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF & Generics / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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