代码之家  ›  专栏  ›  技术社区  ›  Rahul Soni

在Silverlight中使用.NETRIA服务有哪些陷阱?

  •  11
  • Rahul Soni  · 技术社区  · 14 年前

    谢谢,

    8 回复  |  直到 14 年前
        1
  •  5
  •   gius    14 年前

    处理元数据(并且自己编写)真是一件麻烦事,尤其是当你需要更新模型的时候。 这还与验证的定义以及资源中有关属性的所有验证和描述消息有关。但是我们已经创建了一些T4模板,所以它都是自动生成的。

    不幸的是,没有什么灵丹妙药,因此,如果您计划将SL应用程序以外的其他客户端连接到服务器,您可能应该在其他地方观看(可能是WCP数据服务?)。或者如果你不想从你的客户那里更新数据,我认为RIA是杀伤力过大。

        2
  •  1
  •   Francesco Abbruzzese    14 年前

    按照我之前的回答,这里是RIA服务的缺点: 另一方面,ria服务的缺点是缺乏灵活性。它主要像一个管道,将服务器端的类与其客户端代表连接起来,这样您就可以像直接在服务器端类上操作一样在客户端类上操作。如果这个“管道”的处理方式适合您的应用程序,那么您就可以免费获得许多服务(无需编写任何代码……)。但是,有一些限制是无法具体消除的:

    2) 您只能为每个类定义一个Insert/one update/one get方法。如果通过LINQ对客户端查询应用过滤,则只在客户端应用过滤,即从服务器下载所有数据,然后在客户端进行过滤。相反,如果您使用基于OData的WCF数据服务,并在客户端定义查询。此查询被转换为REST查询(在请求的URL中编码的查询),因此实际上只有您需要的过滤器数据才能从服务器下载。有关WCF数据服务的更多信息,请参阅 here .

    3) 与WCF数据服务相比,您没有像Ria服务那样提供验证服务。不过,您可以在免费提供的WPF&Silverlight验证工具包的帮助下继续使用数据注释 here

        3
  •  1
  •   Fermin    14 年前

    例如,我将其与SQL凭据一起使用(用户使用其SQL登录名登录到Silverlight应用程序,我使用用户名+密码动态创建连接字符串)。这需要一点更多的工作,但它工作得很好。

    我还使用它将数据从存储过程而不是实体返回到客户机,同样这需要更多的工作,但效果很好。

        4
  •  1
  •   JDick    14 年前

    Ria服务的创建只是为了与Silverlight一起使用。它们实际上是Silverlight可以使用的标准“包”。优点是您有很多服务,无需编写代码,例如:

    1. 支持数据注释
    2. 支持成员资格提供程序和登录
    3. 支持传输到silverlight服务器端生成的异常。silverlight中存在一个困难,使得通过FaultContract传递异常的正常错误变得困难。关键是浏览器不能处理所有的错误代码。Ria服务用一个技巧解决了这个问题

    this library 它比Ria服务做得更好,对成员身份的支持只需要激活WCF服务已经存在的成员身份端点,最后通过编写WCF行为就可以很容易地解决异常问题。代码可用这里:http://www.silverlightshow.net/Storage/10Tips.zip关键是,使用Ria服务,您只需单击鼠标即可获得所有这些!。另一方面,Ria服务很难定制……所以如果你不喜欢他们提供的标准解决方案,你就不能使用它们

        5
  •  0
  •   Francesco Abbruzzese    14 年前
        6
  •  0
  •   Nair    14 年前

    我一直在使用SL4+EF进行我们的企业开发,我发现,如果使用默认的开箱即用的开发模式,用EF开发是很困难的。我的意思是,你开发的任何一个屏幕,对于你使用EF和表/视图的数据,你的模型很快就会被删除。 在添加了20个包含6到10个表/视图的新页面之后,现在很难在edmx中添加实体。我个人不喜欢吸墨纸。如果您看到了我提出的一些问题,并且基于这些问题的答案,企业级开发似乎不使用现成的EF特性,请使用POCO和PI创建一个域模型,然后使用它来开发您的应用程序。我还没有完成一个成功,所以我没有这个个人的结果。 另一件事,我注意到它与EF本身无关,而与SL本身无关。花点时间了解PRISM/MEF/Caliburn和创建应用程序的用法。我不喜欢SL的一个问题是可测试性,尽管SL单元测试存在,但它本身并不是一个好的单元测试框架。测试EF也不是轻而易举的事。使用PRISM/MEF/Caliburn不仅测试简单,而且您的开发将真正模块化。 因此,在您开始开发之前,我的建议是查看其中一个框架,而不是使用EF outofbox,而是使用POCO创建您的域模型,然后使用POCO在SL中使用它。

        7
  •  0
  •   gius    14 年前

    我对女士真的很失望。从关于这个话题的讨论中可以明显看出,我不是唯一一个有时会被女士提供的所有“工具”弄糊涂的人。问题是,我真的错过了女士的一些管理和协调。

    我有两个例子。

    1. 它们非常相似,都是一样的。L2S本来是为了更好地用于小型项目,EF则是为了企业项目。L2S有更好的设计器和更好的LINQ实现。EF应该能够将更多的数据库表映射到一个实体,但这从来没有真正起作用。顺便说一句,即使是EF4也没有L2S的一个非常有用的特性,那就是 AssociateWith<>

    2. RIA服务与WCF数据服务

    我们应该如何决定使用哪一个(除了花大量时间掌握这两个)?哪一个会被否决?

    …这可能是一篇博文,不是这里的答案。抱歉,我只是想把它写在某个地方,因为有很多关于这些问题的讨论,它似乎是一个合适的地方。我以后一定会写博客的。

        8
  •  0
  •   Francesco Abbruzzese    14 年前

    我已经在我的博客中写了一篇关于Ria-WCF数据服务和WCF-Rest服务的文章,也使用了本文得出的一些结论 here