Silverlight 4.0 如何使用Silverlight 4.0和不使用EF设置RIA服务

Silverlight 4.0 如何使用Silverlight 4.0和不使用EF设置RIA服务,silverlight-4.0,ria,Silverlight 4.0,Ria,作为一名Silverlight新手,我发现建立RIA Web服务非常困难。web上可用的示例几乎总是将实体框架称为ORM,但我们使用NHibernate作为ORM。我知道Brad Abrams的教程,他使用NHibernate作为ORM,但大部分内容超出了我的理解,因为我也是NHibernate的新手,RIA的一些概念对我来说并不清楚,例如DomainService 我想首先保持简单,暂时忽略ORM。那么,有谁能为我指出正确的方向,让Silverlight 4.0和RIA的最新版本能够提供“普通

作为一名Silverlight新手,我发现建立RIA Web服务非常困难。web上可用的示例几乎总是将实体框架称为ORM,但我们使用NHibernate作为ORM。我知道Brad Abrams的教程,他使用NHibernate作为ORM,但大部分内容超出了我的理解,因为我也是NHibernate的新手,RIA的一些概念对我来说并不清楚,例如DomainService

我想首先保持简单,暂时忽略ORM。那么,有谁能为我指出正确的方向,让Silverlight 4.0和RIA的最新版本能够提供“普通”的web服务呢?例如,如何公开一个返回整数100的方法,然后从SilverLight应用程序调用该方法?另外,我不确定它是否相关,但Silverlight应用程序托管在ASP.NET MVC 2中

对我来说这应该很简单,但我现在真的很挣扎

蒂亚

David

这些场景(使用Silverlight的非EntityFramework RIA服务)的文档显然不足,我希望尽快发布一些博客文章来介绍这些场景(包括如何使用NHibernate)

这里有一种方法可以满足您的要求:

如果尚未安装“Silverlight 4 Tools for Visual Studio 2010”:

在VisualStudio2010中创建一个新的Silverlight导航应用程序(选中此框以启用RIA服务)

通过以下方式修改web项目中的web.config:

在本节中,添加:

<httpModules>
  <add name="DomainServiceModule"
   type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule,
         System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0,
         Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
在包含“return 100”方法的web项目中创建一个新类VanillaDomainService:

现在回到Silverlight应用程序项目,在Home.xaml.cs中的OnNavigatedTo方法中,调用新的RIA服务方法(记住所有调用都是异步的):

现在构建并运行,应该就是这样了


我测试了这段代码,它对我起了作用。

谢谢Michael,我一定会尝试一下,希望这能让我的头发保留下来!我期待着你的博客文章介绍如何做到这一点。我相信很多其他人也会感兴趣。嗨,迈克尔,我刚刚运行了你的代码,它非常清晰,易于理解。但是,为了防止像我这样的新手偶然发现这一点,您必须通过浏览安装Silverlight工具的文件系统来获取对System.ServiceModel.DomainServices.Hosting和System.ServiceModel.DomainServices.Server的引用。在我的例子中,这些引用可以在“C:\ProgramFiles(x86)\Microsoft SDK\RIA Services\v1.0\Libraries\Server”中找到。现在来解决NHibernate问题…@DavidS:FWIW,我不必在文件系统上导航来添加这些引用。它们出现在我正常的.NET引用对话框中。我不知道为什么这对你是不同的,但感谢分享你是如何做到的@迈克尔:是的,我也有点惊讶,它们没有出现在正常的.NET引用对话框中。但我必须说,SilverLight并不是一个容易被接受的东西,因为背景中似乎有“魔力”。例如,“SilverlightApplication1.Web.VanillaDomainContext”让我有点不舒服,但在“转到定义(F12)”中,我发现一些代码是在后台生成的。@DavidS:是的,RIA服务有一些“神奇”的代码。但是,可以用WCF数据服务/OData或标准WCF Web服务替换RIA服务,这些服务以更直接、更可预测的方式工作(尽管它们没有像RIA服务那样与Silverlight紧密集成)。
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
     multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
System.ServiceModel.DomainServices.Hosting  
System.ServiceModel.DomainServices.Server
[System.ServiceModel.DomainServices.Hosting.EnableClientAccess()]
public class VanillaDomainService :
                System.ServiceModel.DomainServices.Server.DomainService
{
    public int ReturnInteger100()
    {
        return 100;
    }
}
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        SilverlightApplication1.Web.VanillaDomainContext oneVanillaDomainContext =
           new SilverlightApplication1.Web.VanillaDomainContext();

        oneVanillaDomainContext.ReturnInteger100(
           anInt => MessageBox.Show(anInt.Value.ToString()), null);
    }