использование DLL проекта RIA Service в Windows-сервисе - PullRequest
0 голосов
/ 28 марта 2012

У меня есть один проект, в котором есть RIAService с структурой сущностей, на который ссылается мой проект Silvelright. поэтому, когда я собираю проект, который собирает DLL-файл проекта службы RIA и помещаю его в папку Bin / Debug проекта Silverlight.

Функция службы домена, как показано ниже

[EnableClientAccess()]
public partial class MyClassDomainService : LinqToEntitiesDomainService<MyDatabaseEntities>
{
    [Invoke]
    public void MyFunction(int Para1, string Para2, int Para3, string Para4)
    {
          //mycode
    }
}

Теперь я создаю этот фрагмент и копирую этот RIAService.dll и другие требуемые библиотеки DLL в мой другой проект - проект службы окон.

Теперь в оконной службе я создаю объект этой службы домена, как показано ниже в функции timerQlinkRequest_Elapsed ().

private void timerQ_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    try
    {
        MyClassDomainContext objcontext = new MyClassDomainContext();
        objcontext.MyFunction(1, "ADD", 1234, "Vehicle");
    }
    catch (Exception ex)
    {
        LogMessage("Error : StackTrace : " + ex.StackTrace);
    }
}

После установки и запуска службы окна я получаю ошибку ниже в ex.stackTrace в файле журнала, как показано ниже

Error : StackTrace :    at MS.Internal.JoltHelper.get_Context()
   at MS.Internal.XcpImports.Application_GetCurrent(IntPtr& pApp)
   at System.Windows.Application.get_Current()
   at System.ServiceModel.DomainServices.Client.WebDomainClient`1.ComposeAbsoluteServiceUri()
   at System.ServiceModel.DomainServices.Client.WebDomainClient`1..ctor(Uri serviceUri)
   at RIAService.Web.Service.QLink.MyClassDomainContext..ctor()
   at MywindowService.MyService1.timerQ_Elapsed(Object sender, ElapsedEventArgs e)

Так что мое главное замешательство в том, могу ли я так поступить? если да, то где я ошибаюсь?

пожалуйста, помогите мне.

в ожидании ответа.

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Вы не должны делать то, что пытаетесь сделать.WCF RIA была создана для преодоления разрыва между конкретными реализациями серверных и клиентских приложений.Когда вы создаете свой проект, происходит все виды генерации кода, которая связывает клиента с реализацией на сервере.

Теперь вы МОЖЕТЕ сделать следующее:

  1. Переместите второй клиент к тому же решению и добавьте его в качестве второго клиента RIA в проект Silverlight.Web.Вы можете сделать это в настройках проекта, и вы получите все преимущества RIA.
  2. Вы можете попытаться вызвать развернутую службу RIA, как если бы она была службой WCF;в конце концов это называется WCF RIA Services по причине.Теперь вы не получите всю встроенную поддержку (в основном, предоставляемую генерацией кода), но вы все равно можете вручную выполнять операции CRUD с помощью действий WCF.Проверьте здесь раздел «Перейти к службе домена напрямую», чтобы узнать, как найти файлы SVC.

Я рекомендую 1-й вариант, если вы собираетесь использовать возможности редактирования.,Но второй вариант должен работать относительно безболезненно для данных только для чтения.Но опять же для этого я бы рекомендовал выставить конечную точку O-Data, что очень легко сделать в RIA WCF.

0 голосов
/ 29 марта 2012

я получаю решение другим способом,

в моем проекте. Web (проект ASP.NET) я создаю простое приложение WCF, которое вызывает мою функцию службы RIA WCF.

И в решении службы окна я добавляю ссылку на службу этой службы WCF и вызываю эту функцию WCF и завершаю свою задачу.

@ duluca, спасибо за ответ.

...