C# wcf服务和asp.net表示层

C# 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服务中要使用的每个对象的代理类您

我有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创建一个不同的库,并将其中的类用作数据契约。复制并不是一个真正的问题,因为它保证了合同的某种稳定性,并且可以使用类似的工具将业务对象映射到DTO

让我们考虑在演示文稿(ASP.NET)和服务层之间共享公共业务类库的方法的优点和缺点。p> 优点:

  • 易于实现:只需将现有项目连接到asp.net,将类标记为可序列化,就完成了
  • 非冗余:您有一个类来表示一个概念
缺点:

  • 您的类可能无法序列化
  • 很容易“滑倒”并使用不应该直接在表示层中使用的业务类,而无需通过服务
  • 紧密耦合:更改业务类,服务层和表示层都可能中断
  • 我们为什么要再次使用服务
将此与创建DTO库进行比较:

优点:

  • 接口(数据契约)定义良好:此库中的所有内容都是通信对象
  • 序列化没有问题
  • 表示和服务之间的松散耦合:借助数据契约的抽象,业务逻辑中的更改最多反映到DTO映射级别
缺点:

  • 您需要将对象映射到DTO(认为AutoMapper对此非常有用)
  • 德米特里引用了重复,尽管不必要是主观的:我想我已经向你们展示了为什么需要重复。此外,您不应该害怕在应用程序的不同部分引入同一概念的不同视图:我还没有找到一个完全适合非平凡程序中每个用例的模型

服务的标准实践是返回s而不是业务对象:在表示层中使用业务对象将使其与业务逻辑紧密耦合,而大多数情况下,您不希望这种耦合。还要记住,您在网络上发送的所有内容都应该是可序列化的,您的业务对象可能是也可能不是可序列化的

所以我想说,是的,您很可能希望使用DTO创建一个不同的库,并将其中的类用作数据契约。复制并不是一个真正的问题,因为它保证了合同的某种稳定性,并且可以使用类似的工具将业务对象映射到DTO

让我们考虑在演示文稿(ASP.NET)和服务层之间共享公共业务类库的方法的优点和缺点。p> 优点:

  • 易于实现:只需将现有项目连接到asp.net,将类标记为可序列化,就完成了
  • 非冗余:您有一个类来表示一个概念
缺点:

  • 您的类可能无法序列化
  • 很容易“滑倒”并使用不应该直接在表示层中使用的业务类,而无需通过服务
  • 紧密耦合:更改业务类,服务层和表示层都可能中断
  • 我们为什么要再次使用服务
将此与创建DTO库进行比较:

优点:

  • 接口(数据契约)定义良好:此库中的所有内容都是通信对象
  • 序列化没有问题
  • 表示和服务之间的松散耦合:借助数据契约的抽象,业务逻辑中的更改最多反映到DTO映射级别
缺点:

  • 您需要将对象映射到DTO(认为AutoMapper对此非常有用)
  • 德米特里引用了重复,尽管不必要是主观的:我想我已经向你们展示了为什么需要重复。此外,你不应该害怕在不同的地方对同一概念的消费引入不同的观点