Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / И снова WCF и типы / 9 сообщений из 9, страница 1 из 1
22.05.2008, 14:38
    #35328678
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова WCF и типы
Что имеем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[ServiceContract]
public interface IHDManager
{
        [OperationContract]
        [ServiceKnownType(typeof(Departament))]
        [ServiceKnownType(typeof(LoginAccount))]
        [ServiceKnownType(typeof(Otdel))]
        [ServiceKnownType(typeof(Doljnost))]
        [ServiceKnownType(typeof(LoginGroup))]
        ArrayList SelectArray(Type obt);
}
Далее внизу интерфейса все типы (Departament,Otdel...) определены как бизнес-объекты

реализуем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public ArrayList SelectArray(Type obt)
{
  if (obt == typeof(Departament))
    {
       //некоторый код
    }
}

при работе получаем ошибку которая приведена во вложении.

ее можно избежать если переделать метод

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public ArrayList SelectArray(object ob)
{
  if (ob is Departament)
    {
       //некоторый код
    }
}

Но хочется достичь именно первой реализации. В чем у меня ошибка, подскажите
...
Рейтинг: 0 / 0
22.05.2008, 14:48
    #35328715
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова WCF и типы
webusВ чем у меня ошибка, подскажите
В том, что
Код: plaintext
public abstract class Type
а во время исполнения в SelectArray(Type) фактически передается экземпляр класса RuntimeType, о котором сериализатор ничего не знает.
...
Рейтинг: 0 / 0
22.05.2008, 14:51
    #35328723
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова WCF и типы
Нахлобуч webusВ чем у меня ошибка, подскажите
В том, что
Код: plaintext
public abstract class Type
а во время исполнения в SelectArray(Type) фактически передается экземпляр класса RuntimeType, о котором сериализатор ничего не знает.

Т.е. то что я хочу реализовать не возможно ?
...
Рейтинг: 0 / 0
22.05.2008, 14:54
    #35328735
+2
+2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова WCF и типы
webusТ.е. то что я хочу реализовать не возможно ?
Опубликуйте этот тип, может поможет.
...
Рейтинг: 0 / 0
22.05.2008, 15:04
    #35328776
Volhv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова WCF и типы
а чем вас не устраивает такой вариант?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
[ServiceContract]
public interface IHDManager
{
        ArrayList SelectArray(Departament obt);
        ArrayList SelectArray(LoginAccount obt);
        ArrayList SelectArray(Otdel obt);
        ArrayList SelectArray(Doljnost obt);
        ArrayList SelectArray(LoginGroup obt);
}

или

Код: plaintext
1.
2.
3.
4.
5.
6.
    public interface iAllowedIHDManager { }

    public interface IHDManager
    {
        ArrayList SelectArray<T>(T obt) where T : iAllowedIHDManager;
    }

эти 2 варианта более простые и быстрые (можете провести тесты чтобы убедится)
...
Рейтинг: 0 / 0
22.05.2008, 15:04
    #35328777
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова WCF и типы
+2 webusТ.е. то что я хочу реализовать не возможно ?
Опубликуйте этот тип, может поможет.

Код: plaintext
1.
2.
3.
4.
5.
        [ServiceKnownType(typeof(Departament))]
        [ServiceKnownType(typeof(LoginAccount))]
        [ServiceKnownType(typeof(Otdel))]
        [ServiceKnownType(typeof(Doljnost))]
        [ServiceKnownType(typeof(LoginGroup))]

я опубликовал все возможные типы которые могуть быть переданы
...
Рейтинг: 0 / 0
22.05.2008, 15:06
    #35328784
+2
+2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова WCF и типы
webusя опубликовал все возможные типы которые могуть быть переданы
А передаете что?
Код: plaintext
SelectArray([color=red]Type [/color]obt)
...
Рейтинг: 0 / 0
22.05.2008, 15:14
    #35328821
Volhv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова WCF и типы
Код: plaintext
1.
2.
3.
4.
5.
6.
    public interface iAllowedIHDManager { }

    public interface IHDManager<T> where T: iAllowedIHDManager
    {
        ArrayList SelectArray(T obt);
    }

попробуйте такой вариант, он более гибкий и не требует переписывать интерфейс если потребуется добавить какой то новый тип данных
...
Рейтинг: 0 / 0
22.05.2008, 15:15
    #35328824
webus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова WCF и типы
+2 webusя опубликовал все возможные типы которые могуть быть переданы
А передаете что?
Код: plaintext
SelectArray([color=red]Type [/color]obt)


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


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