在WCF中,如何将数据提取放在已在其他地方定义的类中?

时间:2010-10-09 15:02:34

标签: wcf datacontract

所以我在业务逻辑中有一些类.dll。它不包含在datacontract中,我想通过在Service和IService类中(例如)将它暴露给调用服务的任何东西。但我见过的唯一例子是公开在服务中定义的类,我不希望这样做,如果有意义的话,我不希望在我的业务逻辑层中使用[Datacontract]?

询问是否需要澄清。帮助总是最受欢迎。

谢谢:)

编辑:我对许多这些解决方案感到有些困惑,我想要做的是为服务的调用者提供一系列类到实例,然后通过方法传递回服务。所以:

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

这有意义吗?这有点伪编码,因为我不记得WCF的消费者方面是否已经脱颖而出。所有解决方案似乎都需要了解哪些类可用,或者在一个类中将类混合在一起?

到目前为止,我能看到的唯一其他解决方案是为每个班级设置一个方法,但是让我告诉你可能会有一百个班级!

非常感谢。

5 个答案:

答案 0 :(得分:0)

对于初学者,请勿使用[DataContract]注释业务对象。这被认为是不好的做法。

关于数据合同的video Miguel谈论约35分钟。

答案 1 :(得分:0)

您需要使用的是Data Transfer Object。它将确保您的业务层和服务层之间存在适当的分离。另请查看link

答案 2 :(得分:0)

虽然你应该正确分层,但在某些情况下,你真的不需要分离UI,服务和业务逻辑。通常,当您开发一个较小的项目时会发生这种情况,并且它实际上不会增长。

如果您选择仍想执行此操作,请参阅下面的示例。您基本上要将您的类型包装在像“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() {  }
}

答案 3 :(得分:0)

答案 4 :(得分:0)

从技术角度来看,您可以使用surrogate