Я не новичок в веб-сервисах WCF, но с тех пор, как я в последний раз пользовался им, прошло несколько лет. Я уверен, что в прошлый раз, когда я использовал службу WCF, вы могли определить тип объекта, возвращаемого из вызова службы, при разработке кода. EG;
MyService.Models.ServiceSideObjects.User user = myServiceClient.GetUser();
После этого вы могли использовать объект «пользователь» на стороне клиента. Однако теперь кажется, что служба WCF не будет возвращать ничего, кроме объектов, содержащих базовые типы значений (string, int ect). До сих пор я исправлял это, определяя объекты переноса, которые содержат только эти базовые типы значений, и предоставляя сервису сопоставление свойств сложных объектов «Пользователь» с простыми строками и целыми числами в объекте переноса.
Это становится настоящей болью, когда, например, у вас есть объекты пользовательского типа, содержащие более сложные объекты, такие как мой объект Ticket.
public class Ticket
{
public Agent TicketAgent {get;set;}
public Client Owner {get;set;}
public PendingReason TicketPendingReason {get;set;}
}
Простое сопоставление этого графа объектов с одним классом передачи с огромным списком взаимосвязанных системных свойств дает очень «грязную» бизнес-модель на стороне клиента. Я ошибаюсь, думая, что ДОЛЖЕН быть в состоянии просто получить свой объект Ticket от вызова метода службы и обработать его на стороне клиента в том же состоянии, в котором он находился на стороне сервера?
Я понимаю, что это, вероятно, нарушение какого-то принципала SoA или аналогичного, но мое настольное приложение, в настоящее время использующее эту услугу, является ЕДИНСТВЕННОЙ вещью, которая будет потреблять ее когда-либо. Поэтому мне все равно, смогут ли многие другие клиенты управлять типами данных, возвращающимися из службы, и поэтому требуют какого-то чрезвычайно нормализованного возвращаемого объекта. Я просто хочу, чтобы мой сервис получал объект типа Ticket из своего хранилища, возвращал этот объект клиенту со всеми его неповрежденными свойствами. В настоящее время все, что я получаю, это объект с единственным свойством 'ExtentionData', которое невозможно использовать на стороне клиента.
Надеюсь, это имеет смысл, спасибо за ваше время.