powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / И снова WCF и типы
9 сообщений из 9, страница 1 из 1
И снова WCF и типы
    #35328678
Фотография webus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что имеем:
Код: 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
И снова WCF и типы
    #35328715
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webusВ чем у меня ошибка, подскажите
В том, что
Код: plaintext
public abstract class Type
а во время исполнения в SelectArray(Type) фактически передается экземпляр класса RuntimeType, о котором сериализатор ничего не знает.
...
Рейтинг: 0 / 0
И снова WCF и типы
    #35328723
Фотография webus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч webusВ чем у меня ошибка, подскажите
В том, что
Код: plaintext
public abstract class Type
а во время исполнения в SelectArray(Type) фактически передается экземпляр класса RuntimeType, о котором сериализатор ничего не знает.

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

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

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

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


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


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