WCF обозначает Windows Связь Фонд. Другими словами, речь идет об общем межпроцессном / машинном взаимодействии и не ограничивается гетерогенными системами
Одна вещь, которую следует помнить о WCF, - это то, что, несмотря на видимости, вы фактически вообще не передаете объекты - объекты используются сериализатором для генерации сообщений. На другом конце он десериализуется в независимую копию. В отличие от COM, вы не получаете ссылку на объект отправителя.
Причина, по которой это важно, заключается в том, что если сложные объекты находятся в несериализуемом состоянии, например, в соединении с сокетом, это не приведет к их получению
Кроме того, с помощью DataContractSerializer (который используется по умолчанию), если ваши объекты не аннотированы атрибутом [Serializable] или вы не аннотируете классы с помощью [DataContract] и [DataMember], вы будете отправлять только то состояние, которое открыто для общественности (через публичное поле или собственность).
Это не просто проблема для WCF; Для удаленного взаимодействия требуются объекты, производные от MarshalByRefObject или аннотируемые атрибутом [Serializable]. Построение распределенных систем весьма отличается от построения систем, которые все используют одно и то же адресное пространство памяти. Вы должны тщательно продумать, как вы определяете эту границу между распределенными частями, потому что, например, большое количество небольших вызовов снизит вашу производительность, а не несколько вызовов с большим количеством данных (хотя из вашего описания это может не быть проблемой, которая вас касается)
Таким образом, WCF может обрабатывать произвольно сложные графы объектов, но просто запомните приведенные выше пункты о сериализации