Во-первых, вы должны знать, что нет никакого волшебного способа, которым WCF будет предоставлять информацию любого типа вашему клиенту в сценарии, который вы описали.Если вы собираетесь это сделать, вам придется предоставить механизм самостоятельно.
Далее следует понимать, что WCF на самом деле не передает объекты с сервера на клиент или наоборот.Все, что проходит, - это XML-инфо-наборы.Часто передаваемый информационный набор XML включает в себя сериализованное представление некоторого объекта, существовавшего на стороне отправителя;в этом случае, если клиент знает об этом типе (то есть может загрузить метаданные типа из его сборки), он может десериализовать XML, чтобы создать экземпляр идентичного объекта на стороне клиента.Если у клиента нет метаданных типа, он не может: это обычный случай с WCF, если только типы контрактов данных не находятся в сборках, совместно используемых реализациями сервера и клиента (как правило, не очень хорошая идея).
Способ, которым обычно используется WCF (например, если клиент реализован с использованием «Service Reference» в Visual Studio), что происходит, когда служба публикует метаданные WSDL, описывающие ее операции и схемы XML для параметров операции и возвращаемых значений,и из них генерируется набор типов для использования в реализации клиента.Это НЕ те же типы .NET, что и типы контрактов данных, используемые реализацией сервиса, но они «эквивалентны» в том смысле, что их можно сериализовать в те же XML-данные, передаваемые по сети.Обычно это генерация типов выполняется во время разработки в Visual Studio.
Для того, чтобы делать то, что вы пытаетесь сделать, то есть, по сути, для генерации этого типа во время выполнения, вам потребуется некоторый механизм, с помощью которого клиентможет получить достаточные знания о структуре XML, представляющей различные типы объектов, реализующих ISubject, чтобы он мог понимать XML, полученный от службы, и генерировать соответствующий XML, ожидаемый службой (либо работа с XML напрямую, либо десериализация /сериализовав это каким-то образом).Если вы действительно, действительно хотите это сделать, возможными способами могут быть:
некоторый внеполосный механизм, посредством которого клиент предварительно конфигурируется соответствующей информацией о типе, соответствующей каждому подклассу ISubject.что это может увидеть.Ссылка, представленная в ответе blindmeis, является одним из способов сделать это.
предоставляют отдельную операцию службы, с помощью которой клиент может преобразовать идентификатор подкласса в тип метаданных для подкласса (возможно, какXSD-схема, из которой клиент может сгенерировать подходящий сериализуемый тип .NET для обхода XML).
было бы также принципиально возможно, чтобы служба передавала метаданные типа в некоторыхформат в заголовках ответа, содержащего сериализованный объект.Клиент должен будет читать, интерпретировать и действовать в соответствии с информацией о типе соответствующим образом.
В любом случае это потребует больших усилий и не является стандартным способом использования WCF.,Вам придется решить, стоит ли это того.