【问题标题】:Working with ADO.NET Entity Objects and Soap-based Web Services使用 ADO.NET 实体对象和基于 Soap 的 Web 服务
【发布时间】:2010-09-24 22:30:15
【问题描述】:

我正在构建一个传统的 ASP.NET Web 服务——使用 asmx 构建的样式。这是一项非常简单的服务。我开始为我的持久层使用新的 Ado.NET Entity Framework,但遇到了一些问题:

1) 我不喜欢自动生成的 WSDL —— 复杂类型是这样定义的:

   <s:complexType name="TestObject">
      <s:complexContent mixed="false">
         <s:extension base="tns:EntityObject"> ...

所以,我构建了自己的 WSDL 并使用 wsdl.exe 工具创建了一个服务定义,其中包括一个新的类型定义,所以现在的 WSDL 看起来像,我觉得这是一个更跨平台的设计:

<xsd:complexType name="TestObject">
  <xsd:sequence>
    <xsd:element minOccurs="0" name="created" type="xsd:dateTime"/> ...

我现在让 ASPX 生成一个不错的 WSDL 文件。但现在我不确定我应该把它带到哪里。对于TestObject,我有两种基本相同的类型: 1) 用于 ADO.NET 实体框架的实体持久性 2) 以及用于定义网络数据的一种。

我想弄清楚如何将它们合二为一。我对修改 Ado.NEt Entity 框架自动生成的 .cs 文件有点紧张,因为它似乎可能会被覆盖。

任何对 Ado.Net 实体体验有丰富经验的人认为它值得使用吗?虽然我喜欢能够以多快的速度为数据层构建持久性的想法,但我需要以非常自定义的方式定义实体对象如何通过网络传输,因此我需要修改与其关联的属性特性。此外,在我的服务实现中,我真的不想从 EntityFramework.TestObject 转换为 WSDLDefenition.TestObject。

感谢您的任何意见。

【问题讨论】:

  • 您是否遗漏了一些示例?
  • WSDL 旨在实现互操作性,而不是作为 .NET 类型的传输机制。基本上,您试图通过低保真信号 (ASMX+WSDL) 发送高保真内容(.NET 类型)。如果可以选择,请使用基于 WCF 的服务或 .NET Remoting。这不是一个真正的答案,所以我把它放在这里。
  • 我解决了这个问题。你总结的基本正确。我正在尝试构建一个演示,所以我希望将您所说的高保真和低保真类型合二为一。

标签: .net web-services entity-framework


【解决方案1】:

您正面临着我们许多人在尝试在 SOA 风格架构中使用实体框架时所面临的那种障碍。

实体框架 1.0 版在您所描述的场景中不能很好地工作,因为您最终会在尝试管理对象上下文(并且可能 必须缓存它们)。

我建议通读以下 (1) article 由 EF 团队发布的关于实体框架未来的内容。它还具有捕捉和讨论当前一些不足的效果。

简而言之,我不确定实体框架是否是您现在想要的解决方案,因为在此阶段没有“干净”的解决方案来处理跨线路(或外部服务边界)的 EF 实体。

其他人可能会有所不同...

P.S 您对手动编辑生成的代码保持警惕是正确的 - 对数据模型的任何更新都会覆盖任何修改(尽管您可以扩展它,因为它们在部分类中)。但是,如果您想向属性添加属性,则无济于事。

(a)http://blogs.msdn.com/efdesign/archive/2008/11/20/n-tier-improvements-for-entity-framework.aspx

【讨论】:

    【解决方案2】:

    谢谢。这是我所怀疑的,但不想花一整天的时间研究。我暂时要做的是将我的对象分开,这样我可以保持干净的 WSDL,然后在数据访问层中,我将在网络上的对象和 ADO.NET 实体之间进行转换框架。

    可能不是最合理的方法,但这会让我通过演示。

    感谢文章的链接,我认为我缺少的关键概念是持久无知。我从事过 Java Web 服务,您可以在其中定义 POJO(普通旧 Java 对象)并轻松地通过网络传输它们,以及持久保存到数据源...

    ...我现在明白你为什么建议 WCF,因为它支持持久无知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 2016-12-30
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多