How to set up RIA services with Silverlight 4.0 an

2019-02-07 10:47发布

As a Silverlight newbie, I am finding it really hard to set up an RIA Web service. The examples available on the web almost always refer to Entity framework as the ORM but we are using NHibernate as our ORM. I am aware of the tutorial by Brad Abrams where he uses NHibernate as the ORM but most of it goes above my head because I am also a newbie at NHibernate and some of the concepts of RIA are not clear to me e.g. DomainService.

I'd like to first keep it simple and ignore the ORM at the moment. So, can anyone point me in the right direction as to how to get a "vanilla" web service going with Silverlight 4.0 and the latest release of RIA? For instance, how would I expose a method which returns the integer 100 and then call the method from my SilverLight application? Also, I am not sure if it's relevant or not but the Silverlight application is hosted in ASP.NET MVC 2.

To me it should be so simple but I'm really struggling with it at the moment.

TIA,

David

1条回答
Explosion°爆炸
2楼-- · 2019-02-07 11:53

These scenarios (non-EntityFramework RIA Services with Silverlight) are definitely under documented and I hope to post some blog entries soon to cover these scenarios (including how to use NHibernate).

Here is one way to do what you are asking:

Install "Silverlight 4 Tools for Visual Studio 2010" if you haven't already:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b3deb194-ca86-4fb6-a716-b67c2604a139&displaylang=en

Create a new Silverlight Navigation Application in Visual Studio 2010 (check the box to enable RIA Services).

Modify the web.config in the web project in the following ways:

In the <system.web> section, add:

<httpModules>
  <add name="DomainServiceModule"
   type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule,
         System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0,
         Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>

Add a <system.serviceModel> section as a peer of <system.web>:

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
     multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Add the following references to the web project:

System.ServiceModel.DomainServices.Hosting  
System.ServiceModel.DomainServices.Server

Create a new class VanillaDomainService in the web project that contains your "return 100" method:

[System.ServiceModel.DomainServices.Hosting.EnableClientAccess()]
public class VanillaDomainService :
                System.ServiceModel.DomainServices.Server.DomainService
{
    public int ReturnInteger100()
    {
        return 100;
    }
}

Now back to the Silverlight Application project, in Home.xaml.cs, in the OnNavigatedTo method, call your new RIA Services method (remember all calls are async):

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        SilverlightApplication1.Web.VanillaDomainContext oneVanillaDomainContext =
           new SilverlightApplication1.Web.VanillaDomainContext();

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

Now build and run and that should be it.

I tested this code and it worked for me.

查看更多
登录 后发表回答