Да, вы преодолели барьер - WCF - это система, основанная на сообщениях, которая обменивается только сериализованными данными в формате XML или JSON в текстовом или двоичном формате.Он не однако передает "полные" .NET-объекты с их полными возможностями, такими как методы и все такое (как это должно быть? Он спроектирован так, чтобы быть совместимым , и я непосмотрите, как клиент Ruby или PHP может вызывать метод объекта .NET.
WCF не предназначен для обеспечения удаленного доступа к объектам - он просто передает сообщения между клиентом и сервером.Следовательно, все, что вы можете выразить в XML-схеме (атомарные типы, что-то вроде наследования и композиции), может быть сериализовано и отправлено между двумя сторонами.
Все, что не может моделироваться в XML-схеме -Подобно обобщениям, интерфейсам, методам / коду - нельзя передавать между клиентом и сервером.
Существуют способы и приемы, позволяющие обойти это, если вы контролируете оба конца связи, и оба они основаны на .NET.По сути, вам придется поместить свой контракт на обслуживание и все ваши контракты на данные (все ваши классы) в отдельную сборку, на которую вы затем ссылаетесь как с сервера (реализующего контракт на обслуживание), так и с клиента, вызывающего контракт.Вы можете указать WCF повторно использовать типы, которые уже существуют в ссылочных сборках, и в этом случае клиент будет повторно использовать готовый класс Person
(со всеми его достоинствами .NET) из вашей общей совместно используемой сборки вместопересоздание клиентского прокси-сервера данных.С помощью этого трюка вы можете сделать так, чтобы WCF отправлял сериализованные сообщения по сети, но на стороне клиента вы заново создаете полноценный объект .NET со всеми его методами и всеми.
Опять же: этопрекрасно работает, пока вы контролируете оба конца коммуникации, и оба конца используют .NET.Любая совместимость выходит за рамки этого подхода.