none
了解 RIA Services 的时候产生的一些初级问题 RRS feed

  • 问题

  • 问题有如下几点:

    1.应用 RIA Services 进行开发的时候,对于数据访问部分一定要是 ADO.Net Entity Framework 才行吗?传统的 ADO.Net 不能在这个环境下使用吗?有此问题的主要原因是,我在试着建立一个 DomainService 类型的类的时候,设计器窗口中“Available DataContext/ObjectContext classes:" 下的下拉框只有一个 "<emptey domain service class>"(我知道这是因为我没有创建实体类的缘故),然后我就点击“OK”,生成了一个空的继承了 DomainService 类的我的测试类,上面有一行自动生成的注释:“// TODO: Create methods containing your application logic.” 但是无论我增加什么方法(我的本意就是在这里写方法,调用那些以传统 ADO.Net 方式进行数据访问的方法)进去,编译整个解决方案,都无法在我的 Silverlight 项目中生成客户端类,这是什么原因呢?是否就是我开头猜测的传统的 ADO.Net 不能在 RIA Service 这个环境下使用的原因?

    2.看了两天网上的各种文章,还是有些概念不清的样子。比如,Entity Framework 和 Data Services 的关系,还有就是 RIA Services 和前面两者的关系了,希望有人能帮我解答一下,万分感谢!

     

    -- 2010-07-23 17:33 新增以下说明 --

    刚才又试了一下,发现问题一里面描述的现象产生的原因是我的 Silverlight 项目的问题,它没有和 RIA Services 建立链接,所以也就无法将客户端类生成到它的项目文件夹底下。不过仍然有问题,我在服务端 DomainService 类中写了两个简单的方,测试调用情况,一个是无参的返回字符串“HelloWorld!” 的方法,另一个是带两个整形形参 a,b,返回 a+b 的和的方法。

    运行程序的时候,我以如下方法调用:(context 对象就是我自己写的 TestDomainContext 类,它继承了 DomainContext 类。)

    string result = context.HelloWorld().Value;

    int sum = context.Sum(1, 2).Value;

    第一个方法始终返回的是 "" 空串,而第二个方法始终返回的是 0。打断点跟踪了一下发现实参 1 和 2 是可以正常的传递到服务端的。

    之前的第一个问题已经解决了,但是取而代之的就是现在这个返回值的问题了,有人知道是什么原因吗?

    再次谢谢大家关注!

    2010年7月23日 8:31

答案

  • 问题2.

       EF是ORM框架,WCF RIA Services和WCF Data Services都是服务开发框架,前者主要服务RIA客户程序,而后者主要是把数据转化为服务,形式是Rest,没限制客户端程序的形式。

    ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发表。
    ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用。http://www.itstrike.cn/Question/What-is-the-ADO.NET-Entity-Framework

    WCF RIA Services简化了N层结构的RIA应用程序的开发,例如Silverlight应用。当开发一个N层结构的RIA应用程序时,一个通常的问题就是在中间层和表现层之间协调应用逻辑。为了建立更好的用户体验,你可能想要你的RIA客户端了解在服务器上的应用逻辑,但并不想开发和维护在表现层和中间层上的应用逻辑。现在RIA服务可以解决这个问题,它提供框架组件、工具以及服务来使RIA客户端不用手动复制程序逻辑就能调用位于服务器上的应用逻辑。
    文章出处:(www.firnow.com):http://dev.firnow.com/course/4_webprogram/asp.net/netjs/20100714/443242.html

    WCF Data Services(以前称为“ADO.NET Data Services”)是由模式和库结合而成的,这使得您可以创建和访问 Web 或 Intranet 的数据服务。WCF Data Services 将数据公开为可通过 URI 进行寻址的资源。这样,您就可以通过使用具象状态传输 (REST)(可能为英文网页)的语义(尤其是标准 HTTP 谓词 GET、PUT、POST 和 DELETE)来访问和更改数据。http://msdn.microsoft.com/zh-cn/library/cc668792.aspx


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    【WCF中文技术论坛】:微软WCF中文技术论坛
    【WCF英文技术论坛】:微软WCF英文技术论坛

    2010年7月25日 13:48
    版主
  • 你好,

         WCF RIA当然是支持非EF的其他Database访问方式的。

         这里有篇文章是介绍各种数据访问方式和RIA的

         http://blogs.msdn.com/b/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx

         另外:客户端无法生成代码的问题,可能是由于你没有在你的DomainService上标明

         EnableClientAccess属性。

    2010年7月26日 9:24
  • 你好,

          WCF RIA与数据访问紧密的结合了起来。它支持5种类型的方法,分别为CRUD(对应为Query,Insert,Delete,Update)以及Invoke。

          在CRUD中他的返回值必须是Entity(POCO类型在使用时也会被转成Entity)类型,或者是Entity类型的数组,集合等。

          你可以在Invoke方法中返回string , int。比如在你的DomainService中添加下列方法

            [Invoke]
            public string Test() {
                return "asdf";
            }

    2010年7月27日 2:54

全部回复

  • 重定向到 ADO.NET 板块.
    2010年7月23日 9:54
  • 问题2.

       EF是ORM框架,WCF RIA Services和WCF Data Services都是服务开发框架,前者主要服务RIA客户程序,而后者主要是把数据转化为服务,形式是Rest,没限制客户端程序的形式。

    ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发表。
    ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用。http://www.itstrike.cn/Question/What-is-the-ADO.NET-Entity-Framework

    WCF RIA Services简化了N层结构的RIA应用程序的开发,例如Silverlight应用。当开发一个N层结构的RIA应用程序时,一个通常的问题就是在中间层和表现层之间协调应用逻辑。为了建立更好的用户体验,你可能想要你的RIA客户端了解在服务器上的应用逻辑,但并不想开发和维护在表现层和中间层上的应用逻辑。现在RIA服务可以解决这个问题,它提供框架组件、工具以及服务来使RIA客户端不用手动复制程序逻辑就能调用位于服务器上的应用逻辑。
    文章出处:(www.firnow.com):http://dev.firnow.com/course/4_webprogram/asp.net/netjs/20100714/443242.html

    WCF Data Services(以前称为“ADO.NET Data Services”)是由模式和库结合而成的,这使得您可以创建和访问 Web 或 Intranet 的数据服务。WCF Data Services 将数据公开为可通过 URI 进行寻址的资源。这样,您就可以通过使用具象状态传输 (REST)(可能为英文网页)的语义(尤其是标准 HTTP 谓词 GET、PUT、POST 和 DELETE)来访问和更改数据。http://msdn.microsoft.com/zh-cn/library/cc668792.aspx


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    【WCF中文技术论坛】:微软WCF中文技术论坛
    【WCF英文技术论坛】:微软WCF英文技术论坛

    2010年7月25日 13:48
    版主
  • 问题1.我个人感觉不一定非要使用EF,对于.NET Framework下提供的各种类库,如果你愿意,都可以完全自己重写代码,来实现相同的功能。

    不过这个需要对于你的描述情况有经验的开发者印证一下。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    【WCF中文技术论坛】:微软WCF中文技术论坛
    【WCF英文技术论坛】:微软WCF英文技术论坛

    2010年7月25日 13:50
    版主
  • 本来就有强类型化dataset的支持啊
    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我
    2010年7月26日 4:24
  • 本来就有强类型化dataset的支持啊
    成为 Microsoft V Dash了。。。 欢迎各位前辈同事在OCS加我


    您好。

    嗯,这个……我现在还没有什么概念,我现在主要是想知道我更新描述后的问题1,为什么string类型始终返回空串,而int类型始终返回的是0…………

    2010年7月26日 7:00
  • 问题2.

       EF是ORM框架,WCF RIA Services和WCF Data Services都是服务开发框架,前者主要服务RIA客户程序,而后者主要是把数据转化为服务,形式是Rest,没限制客户端程序的形式。

    ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发表。
    ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,Object Context 以及 LINQ 可以使用。http://www.itstrike.cn/Question/What-is-the-ADO.NET-Entity-Framework

    WCF RIA Services简化了N层结构的RIA应用程序的开发,例如Silverlight应用。当开发一个N层结构的RIA应用程序时,一个通常的问题就是在中间层和表现层之间协调应用逻辑。为了建立更好的用户体验,你可能想要你的RIA客户端了解在服务器上的应用逻辑,但并不想开发和维护在表现层和中间层上的应用逻辑。现在RIA服务可以解决这个问题,它提供框架组件、工具以及服务来使RIA客户端不用手动复制程序逻辑就能调用位于服务器上的应用逻辑。
    文章出处:(www.firnow.com):http://dev.firnow.com/course/4_webprogram/asp.net/netjs/20100714/443242.html

    WCF Data Services(以前称为“ADO.NET Data Services”)是由模式和库结合而成的,这使得您可以创建和访问 Web 或 Intranet 的数据服务。WCF Data Services 将数据公开为可通过 URI 进行寻址的资源。这样,您就可以通过使用具象状态传输 (REST)(可能为英文网页)的语义(尤其是标准 HTTP 谓词 GET、PUT、POST 和 DELETE)来访问和更改数据。http://msdn.microsoft.com/zh-cn/library/cc668792.aspx


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    【WCF中文技术论坛】:微软WCF中文技术论坛
    【WCF英文技术论坛】:微软WCF英文技术论坛


    哦,这样归纳的看起来就清晰多了,非常感谢。虽然想标记为答复,不过第一个问题还是有待解决,所以暂时就先不设为答复了,再过几天,如果还没有人能解答的话,我就回来设定为答复。

    再次感谢!

    2010年7月26日 7:05
  • 嗯,好期待有经验的人能来帮我看看啊………………
    2010年7月26日 7:05
  • 你好,

         WCF RIA当然是支持非EF的其他Database访问方式的。

         这里有篇文章是介绍各种数据访问方式和RIA的

         http://blogs.msdn.com/b/brada/archive/2009/08/02/business-apps-example-for-silverlight-3-rtm-and-net-ria-services-july-update-summary.aspx

         另外:客户端无法生成代码的问题,可能是由于你没有在你的DomainService上标明

         EnableClientAccess属性。

    2010年7月26日 9:24
  • 您好:

    DomainService 上的 EnableClientAccess 属性是已经标明了的。现在也能成功生成客户端代码,现在的问题是,就如我在主贴中最后更新描述中说的那样,客户端无法成功接收到服务端那里很简单的返回string 和 int 类型的方法的返回值……

    另外,您给我提供的那篇文章确实让我对这类问题有了新的认识,不过也许是理解的还不到位,对于我本篇帖子中提到的问题还是不知道怎么解决……

     

    2010年7月27日 1:48
  • 你好,

          WCF RIA与数据访问紧密的结合了起来。它支持5种类型的方法,分别为CRUD(对应为Query,Insert,Delete,Update)以及Invoke。

          在CRUD中他的返回值必须是Entity(POCO类型在使用时也会被转成Entity)类型,或者是Entity类型的数组,集合等。

          你可以在Invoke方法中返回string , int。比如在你的DomainService中添加下列方法

            [Invoke]
            public string Test() {
                return "asdf";
            }

    2010年7月27日 2:54
  • 哇!确实是这样,终于成了!非常感谢您的帮助!

    2010年7月27日 3:42
  • 第二个问题

    string result = context.HelloWorld().Value;这是同步调用思路,应该是没有值的

    记住,在RIA Service下,所有的方法调用都是异步的,我发直接获得返回值,必须通过callback实现

    2010年8月4日 15:41
  • 记住,在RIA Service下,所有的方法调用都是异步的,我发直接获得返回值,必须通过callback实现

    这句话帮我解决了一个困惑已久的问题,谢谢!


    我也是.net狂热一族
    2011年7月8日 0:11