безболезнен начин за преместване на достъпа до данни от десктоп приложение към wcf услуга

Имам приложение, което използва Entity Framework за достъп до данните и в целия код има linq изрази като този:

var idsOrfaos = context.Items.Cast<OrdemAberta>()
                             .Select(p => p.OS)
                             .Except(IdsBd);

и SQL изрази също:

    var resumo = context.Database.SqlQuery<ViewModelSla>(
                    @"select * from table where blablabla", 
new object[] { new SqlParameter("parameteer", "parameteer) }
                           ).OrderBy(p => p.Ano).ThenBy(p => p.Mes);

Това е WPF приложение.

Въпросът ми е: как да преместя целия достъп до данни (за подобряване на сигурността и други причини) към WCF услуга, която да използвам през HTTP по безболезнен начин? Трябва да пренапиша всички методи за достъп в WCF приложението и да извикам WPF?

obs.: Разгледах WCF Data Services OData, но има някои функции, които не работят за мен и услугата не трябва да бъде RESTful.


person Gustavo F    schedule 18.01.2012    source източник


Отговори (2)


Бих предприел подход стъпка по стъпка.

Рефакторинг на всички извиквания на базата данни в ниво на обслужване от страна на клиента.

Отколкото:

var idsOrfaos = context.Items.Cast<OrdemAberta>()
                         .Select(p => p.OS)
                         .Except(IdsBd);

Трябва да имате обаждане нещо подобно:

var idsOrfaos = Application.ItemService.GetAllExcept(IdsBd);

След като всичките ви извиквания към базата данни бъдат преместени в слой на услугата, ще бъде по-лесно да включите това в WCF услуга, която може да изпълнява тези заявки вместо вас.

person armen.shimoon    schedule 18.01.2012

Рамката на обекта не поддържа безпроблемен преход към използване в WCF. WCF Data Services е най-близката опция тук. Доколкото ми е известно, единственият ORM, който всъщност поддържа безпроблемен преход на заявки през границите на WCF за WPF и нормални .NET проекти директно, е Светлинна скорост 4.

По този начин ще трябва ефективно да преместите вашите заявки във вашата WCF услуга и след това да промените клиента, за да извиква WCF услугата. Това налага допълнителни ограничения на вашия клиент, тъй като вече не работите директно върху EF контекстите, а по-скоро върху API за справка на услугата.

person Reed Copsey    schedule 18.01.2012