Как настроить службы RIA с Silverlight 4.0 и без EF

Как новичок в Silverlight, мне очень сложно настроить веб-службу RIA. Примеры, доступные в Интернете, почти всегда относятся к инфраструктуре Entity как к ORM, но мы используем NHibernate в качестве нашей ORM. Я знаю учебник Брэда Абрамса, в котором он использует NHibernate в качестве ORM, но большая часть этого выше моего понимания, потому что я также новичок в NHibernate, и некоторые концепции RIA мне непонятны, например. ДоменСервис.

Я хотел бы сначала сделать это простым и игнорировать ORM на данный момент. Итак, может ли кто-нибудь указать мне правильное направление в отношении того, как получить «ванильный» веб-сервис, работающий с Silverlight 4.0 и последним выпуском RIA? Например, как мне открыть метод, который возвращает целое число 100, а затем вызвать этот метод из моего приложения SilverLight? Кроме того, я не уверен, актуально это или нет, но приложение Silverlight размещено в ASP.NET MVC 2.

Для меня это должно быть так просто, но я действительно борюсь с этим в данный момент.

ТИА,

Дэйвид


person DavidS    schedule 16.12.2010    source источник


Ответы (1)


Эти сценарии (службы RIA не EntityFramework с Silverlight) определенно недостаточно задокументированы, и я надеюсь вскоре опубликовать некоторые записи в блоге, чтобы охватить эти сценарии (включая то, как использовать NHibernate).

Вот один из способов сделать то, что вы просите:

Установите «Инструменты Silverlight 4 для Visual Studio 2010», если вы еще этого не сделали:

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

Создайте новое навигационное приложение Silverlight в Visual Studio 2010 (установите флажок, чтобы включить службы RIA).

Измените файл web.config в веб-проекте следующими способами:

В разделе ‹system.web› добавьте:

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

Добавьте раздел ‹system.serviceModel› как аналог ‹system.web›:

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

Добавьте следующие ссылки в веб-проект:

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

Создайте новый класс VanillaDomainService в веб-проекте, который содержит ваш метод «return 100»:

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

Теперь вернемся к проекту приложения Silverlight, в Home.xaml.cs, в методе OnNavigatedTo вызовите новый метод RIA Services (помните, что все вызовы являются асинхронными):

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

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

Теперь создайте и запустите, и это должно быть так.

Я протестировал этот код, и он сработал для меня.

person Michael Maddox    schedule 17.12.2010
comment
Спасибо, Майкл, я обязательно попробую и, надеюсь, это сохранит оставшиеся волосы на моей голове! Я с нетерпением жду ваших записей в блоге о том, как это сделать. Уверен, многим другим тоже будет интересно. - person DavidS; 17.12.2010
comment
Привет, Майкл, я только что запустил ваш код, который был очень ясным и простым для понимания. Однако на всякий случай, если есть другие новички, такие как я, которые наткнутся на это, вам придется получить ссылки на System.ServiceModel.DomainServices.Hosting и System.ServiceModel.DomainServices.Server, просмотрев файловую систему, где вы установили Silverlight. инструменты. В моем случае эти ссылки были найдены в папке C:\Program Files (x86)\Microsoft SDK\RIA Services\v1.0\Libraries\Server. Теперь о решении проблемы NHibernate... - person DavidS; 17.12.2010
comment
@DavidS: FWIW, мне не нужно было перемещаться по файловой системе, чтобы добавить эти ссылки. Они появились у меня в обычном диалоговом окне ссылок .NET. Я понятия не имею, почему у вас было по-другому, но спасибо, что поделились тем, как вы это сделали! - person Michael Maddox; 17.12.2010
comment
@Michael: Да, я также был немного удивлен, что они не отображаются в обычном диалоговом окне ссылок .NET. Но я должен сказать, что SilverLight — это не то, что легко подобрать, поскольку на заднем плане, кажется, есть волшебство. Так, например, SilverlightApplication1.Web.VanillaDomainContext немного сбил меня с толку, но затем с помощью «Перейти к определению» (F12) я обнаружил, что в фоновом режиме генерируется какой-то код. - person DavidS; 17.12.2010
comment
@DavidS: Да, у RIA Services есть какой-то волшебный код, который он делает. Однако службы RIA можно заменить службами данных WCF / OData или стандартной веб-службой WCF, которые работают более прямолинейно и предсказуемо (хотя они не так тесно интегрированы с Silverlight, как службы RIA). - person Michael Maddox; 17.12.2010
comment
@Michael: я пытался пойти по маршруту веб-службы WCF, но снова не смог добиться успеха, и это было сделано в соответствии с руководством MS. До сих пор это был довольно разочаровывающий опыт изучения SL. Как вы нашли его, когда только начинали? - person DavidS; 17.12.2010
comment
@DavidS: меня это тоже очень расстроило. В конце концов я проработал все проблемы, которые у меня были, и, как я уже сказал, я надеюсь опубликовать найденные решения в своем блоге. - person Michael Maddox; 24.12.2010
comment
@Майкл: Спасибо за ваш вклад. :). Счастливых праздников! - person DavidS; 24.12.2010