C# wcf服务和asp.net表示层
我有wcf服务,负责数据库交互和业务逻辑。它还具有用于业务对象的类库。我希望wcf服务返回对象列表。我是否必须为我的asp.net项目(正在使用服务)创建另一个业务对象类库,以便asp.net项目能够理解对象类型?不太可能。当您通过visual studio使用add service reference向web服务添加引用时,您将获得web服务中要使用的每个对象的代理类。当您通过visual studio使用“添加服务引用”添加对web服务的引用时,您将获得web服务中要使用的每个对象的代理类您应该在服务和asp.net项目之间共享类对象库。这就像是整个项目的“中间件”。这将避免不必要的重复。基本上,只需将所有业务对象移动到不同的项目中,并将其包含到wcf和asp.net解决方案中。您应该在服务和asp.net项目之间共享类对象库。这就像是整个项目的“中间件”。这将避免不必要的重复。基本上,只需将所有业务对象移动到不同的项目中,并将其包含到wcf和asp.net解决方案中。服务的标准做法是返回s而不是业务对象:在表示层中使用业务对象将使其与业务逻辑紧密耦合,大多数时候,你不希望这种耦合。还要记住,您在网络上发送的所有内容都应该是可序列化的,您的业务对象可能是也可能不是可序列化的 所以我想说,是的,您很可能希望使用DTO创建一个不同的库,并将其中的类用作数据契约。复制并不是一个真正的问题,因为它保证了合同的某种稳定性,并且可以使用类似的工具将业务对象映射到DTOC# wcf服务和asp.net表示层,c#,wcf,architecture,C#,Wcf,Architecture,我有wcf服务,负责数据库交互和业务逻辑。它还具有用于业务对象的类库。我希望wcf服务返回对象列表。我是否必须为我的asp.net项目(正在使用服务)创建另一个业务对象类库,以便asp.net项目能够理解对象类型?不太可能。当您通过visual studio使用add service reference向web服务添加引用时,您将获得web服务中要使用的每个对象的代理类。当您通过visual studio使用“添加服务引用”添加对web服务的引用时,您将获得web服务中要使用的每个对象的代理类您
让我们考虑在演示文稿(ASP.NET)和服务层之间共享公共业务类库的方法的优点和缺点。p> 优点:
- 易于实现:只需将现有项目连接到asp.net,将类标记为可序列化,就完成了
- 非冗余:您有一个类来表示一个概念
- 您的类可能无法序列化
- 很容易“滑倒”并使用不应该直接在表示层中使用的业务类,而无需通过服务
- 紧密耦合:更改业务类,服务层和表示层都可能中断
- 我们为什么要再次使用服务
- 接口(数据契约)定义良好:此库中的所有内容都是通信对象
- 序列化没有问题
- 表示和服务之间的松散耦合:借助数据契约的抽象,业务逻辑中的更改最多反映到DTO映射级别
- 您需要将对象映射到DTO(认为AutoMapper对此非常有用)
- 德米特里引用了重复,尽管不必要是主观的:我想我已经向你们展示了为什么需要重复。此外,您不应该害怕在应用程序的不同部分引入同一概念的不同视图:我还没有找到一个完全适合非平凡程序中每个用例的模型
让我们考虑在演示文稿(ASP.NET)和服务层之间共享公共业务类库的方法的优点和缺点。p> 优点:
- 易于实现:只需将现有项目连接到asp.net,将类标记为可序列化,就完成了
- 非冗余:您有一个类来表示一个概念
- 您的类可能无法序列化
- 很容易“滑倒”并使用不应该直接在表示层中使用的业务类,而无需通过服务
- 紧密耦合:更改业务类,服务层和表示层都可能中断
- 我们为什么要再次使用服务
- 接口(数据契约)定义良好:此库中的所有内容都是通信对象
- 序列化没有问题
- 表示和服务之间的松散耦合:借助数据契约的抽象,业务逻辑中的更改最多反映到DTO映射级别
- 您需要将对象映射到DTO(认为AutoMapper对此非常有用)
- 德米特里引用了重复,尽管不必要是主观的:我想我已经向你们展示了为什么需要重复。此外,你不应该害怕在不同的地方对同一概念的消费引入不同的观点