Вложенные / внутренние классы в WCF?
Я хотел бы знать, существует ли какая-либо проблема после создания открытых вложенных / внутренних классов WCF (DataContracts). И если да, то каковы эти проблемы.
(Один из моих коллег видел в Интернете кое-что о таких проблемах, но они кажутся специфическими для некоторой ситуации, и мы не находим четкого "да, это будет работать" или "нет, вложенные классы не работают в WCF", поэтому я предполагаю, что они обычно работают.)
1 ответ
Контракты на предоставление данных являются частью общедоступного API, предоставляемого вашей службой. Несмотря на то, что они представлены в коде простыми классами CLR (хотя и украшены атрибутом) - не обманывайте себя - они действительно сериализуются по проводам в строки для потребления клиентом / сервером. Таким образом, с точки зрения сервис-ориентированного подхода мы должны отойти от соблазна связать их с объектно-ориентированными концепциями.
Используя наследование, абстракции интерфейса и вложенные классы имеют дело с концепциями ОО (полиморфизм, абстракция и доступ), и хотя некоторые / все из них технически возможны в WCF (например, через KnownTypes
атрибут) - только потому, что вы можете сделать что-то - это не значит, что вы должны.
Я не сомневаюсь, что есть какой-то способ добиться правильного поведения сериализации, чтобы WCF распознавал вложенные классы. Однако при этом я подозреваю, что вы идете вразрез с ориентацией на обслуживание - и, следовательно, не используете всю мощь своей сервис-ориентированной архитектуры.