- Ответом на этот вопрос является и Да, и Нет. Да для предполагаемого сервера и Нет для предполагаемого клиента.
- Мы можем создать общий Контракт данных на сервере, но, используя его в любом операционном контракте, мынеобходимо указать тип данных универсального.
И на стороне клиента этот контракт данных будет представлен только как строго тип данных, а не универсальный.
[DataContract]
public class MyGenericObject<T>
{
private T _id;
[DataMember]
public T ID
{
get { return _id; }
set { _id = value; }
}
}
[OperationContract]
MyGenericObject<int> GetGenericObject();
Это то, что мы имеем на сервере, которое мы можем видеть, используя общий контракт данных, мы должны указать тип, иначе это приведет к ошибке времени компиляции.
На клиенте то, что мы получаем из WSDL, этоследующее:
[DataContract]
public class MyGenericObjectOfint
Мы можем видеть здесь, что мы получаем от WSDL не общий контракт данных. Прокси-сервер WSDL создает класс с новым именем, используя некоторое соглашение.
Соглашениеиспользуется
универсальное имя класса + "Of" + тип имя параметра + хэш
хеш генерируется не всегда, он будет генерироваться только при наличии шансаименного столкновения.