В WCF как вы помещаете datacontract на класс, который уже был определен в другом месте? - PullRequest
0 голосов
/ 09 октября 2010

Итак, у меня есть некоторый класс в бизнес-логике .dll.Он не заключен в контракт данных, я хотел бы показать его всему, что вызывает службу, например, в классах Service и IService.Но единственными примерами, которые я видел, было раскрытие классов, определенных в сервисе, я не хочу этого делать и не хочу использовать [Datacontract] в моем слое бизнес-логики, если это имеет смысл?

Спросите, требуются ли какие-либо разъяснения.Помощь, как всегда, высоко ценится.

Спасибо:)

edit: многие из этих решений меня слегка смущают, и я хотел бы предоставить вызывающей стороне услуги рядклассы для экземпляра, а затем передать обратно службе через метод.Итак:

public Class ServiceConsumer{
    addPerson(){
        theService.addPerson(new theService.Person("Thomas", 22, "Male");
    }
}

Имеет ли это смысл?Это немного псевдокод, потому что я не могу вспомнить, чтобы потребительская сторона WCF вызывала у меня из головы.Кажется, что все решения требуют либо знания о том, какие классы доступны, либо классов, объединенных в одном классе?

Единственное другое решение, которое я могу видеть до сих пор, - это иметь метод для каждого класса, но позвольте мне сказать,Вас потенциально будет сто классов!

Большое спасибо.

Ответы [ 5 ]

0 голосов
/ 10 октября 2010

С технологической точки зрения вы можете использовать суррогат .

0 голосов
/ 10 октября 2010

Рассматривали ли вы использование POCO - http://msdn.microsoft.com/en-us/library/ee705457.aspx

0 голосов
/ 09 октября 2010

Вам необходимо использовать Объект передачи данных .Это обеспечит правильное разделение между вашим бизнес-уровнем и уровнем обслуживания.Также проверьте эту ссылку .

0 голосов
/ 09 октября 2010

Несмотря на то, что вы должны правильно наложить слой, в некоторых случаях вам не нужно разделять пользовательский интерфейс, сервис и бизнес-логику.Обычно это происходит, когда вы разрабатываете небольшой проект, и он действительно не будет расти.

Если вы решили, что все еще хотите это сделать, см. Пример ниже.По сути, вы собираетесь обернуть ваши типы в прокси, например «RequestContract». В моем случае мои типы BL будут MyType и ByMyType.Эти два класса не аннотированы, и они вводятся с использованием DataContracts, определенных в сервисе.

public class ExampleService : IExampleService
{
    public ExampleService() { }

    public GetMyTypeResponseContract GetMyType(GetMyTypeRequestContract theType)
    {
        return new GetMyTypeResponseContract()
        {
            MyType = new MyType()
            {
                Response = theType.ByMyType.Request
            }
        };
    }
}

[DataContract]
public class GetMyTypeRequestContract
{
    [DataMember]
    public ByMyType ByMyType { get; set; }
    public GetMyTypeRequestContract() {  }
}
[DataContract]
public class GetMyTypeResponseContract
{
    [DataMember]
    public MyType MyType { get; set; }
    public GetMyTypeResponseContract() {  }
}
0 голосов
/ 09 октября 2010

Для начала, не аннотируйте бизнес-объект с помощью [DataContract]. Это считается плохой практикой.

Примерно через 35 минут видео Мигель рассказывает о контрактах на передачу данных.

...