Получить объект общего типа (например, MyObject <T>) с удаленного компьютера - PullRequest
0 голосов
/ 03 июня 2010

У меня есть два приложения, которые общаются через WCF.

На сервере существует следующий объект:

public class MyObject<T>
{
    ...
    public Entry<T> GetValue()
}

Где Entry<T> - другой объект с T Data в качестве публичной собственности. T может быть любым числом типов (строковые, двойные и т. Д.)

На клиенте у меня есть ClientObject<T>, которому нужно получить значение Data с сервера (того же типа).

Поскольку я использую WCF, я должен определить свой ServiceContract как интерфейс, и у меня не может быть ClientObject<T> call Entry<T> GetMyObjectValue (string Name), который вызывает GetValue на правильном MyObject<T>, потому что мой интерфейс не знать о типе информации.

Я попытался реализовать отдельные функции GetValue (GetMyObjectValueDouble, GetMyObjectValueString) в интерфейсе, а затем ClientObject определил правильную функцию для вызова. Однако Entry<T> val = (Entry<T>)GetMyObjectValueDouble(...); не работает, потому что он не уверен в информации о типе.

Как мне получить общий объект поверх WCF с правильной информацией о типе? Дайте мне знать, если есть другие детали, которые я могу предоставить.

Спасибо!


Я использовал комбинацию методов, чтобы заставить это работать. Я реализовал несколько методов Entry<double> GetMyObjectValueDouble(...), Entry<string> GetMyObjectValueString(...) на сервере. На клиенте я проверяю тип объекта и затем вызываю соответствующую функцию:

Entry<T> Data = (Entry<T>)Convert.ChangeType(Client.GetMyObjectValueDouble(...),typeof(Entry<T>));

Надеюсь, это кому-нибудь поможет

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

Веб-службы SOAP основаны на WSDL и XML-схеме. WSDL описывает службы и операции, а схема XML определяет данные, с которыми работают операции.

Схема XML не может описывать дженерики. Поэтому в веб-сервисах нет дженериков.

1 голос
/ 03 июня 2010

Вы не можете использовать дженерики в WCF. Служба должна знать тип объекта во время передачи. Но это не конкретный тип. Что вы можете сделать, так это определить собственный класс, содержащий определения всех других объектов в вашем приложении. И вы можете установить конкретный объект, что вам когда-либо нужно, а затем передать этот класс. Таким образом, вы также можете переносить несколько объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...