Silverlight WCF RIA服务(十)Domain Services 3

来源:互联网 发布:sqlserver定义变量 编辑:程序博客网 时间:2024/06/06 01:17

如何在Domain Services中添加商业逻辑
即使在Domain Services中已经包含了更新、插入、删除等操作,但我们还是经常需要添加一些商业逻辑来管理那些修改数据的过程。还可能需要添加一些有别于传统的新的查询、更新等操作。这节中,我们将学习如何修改数据操作来满足商业要求,还学习如何添加一个命名的更新named update方法和一个调用invoke的操作
在操作数据的方法中添加商业逻辑


  1. 创建更新、插入、删除等应用程序所需的方法 :当在添加新的域服务类的对话框中生成域服务时,选择允许编辑(Enable editing)选项。或添加满足这些操作所需签名的方法。
  2. 在这些方法中,添加代码来指定处理需求的逻辑。
  3. 添加其他满足商业需求的方法。如果不想方法作为服务而公开,可以标记[IgnoreOperationAttribute]属性[Ignore]

下面是一个插入的方法,此方法指派一个销售员。如果在公司的数据库中有顾客,RetrieveSalesPersonForCompany方法从公司中检索销售员的名字。这个方法标记了IgnoreOperationAttribute属性,所以客户端不能调用这个方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
publicvoidInsertCustomer(Customer customer
{
if(customer.SalesPerson == String.Empty)
{
customer.SalesPerson = RetrieveSalesPersonForCompany(customer.CompanyName);
}
this.ObjectContext.AddToCustomers(customer);
}
[IgnoreOperation]
publicstringRetrieveSalesPersonForCompany(stringcompanyname)
{
stringsalesPersonToAssign ="unassigned";
List<CUSTOMER> customers = GetCustomers().Where(c => c.CompanyName == companyname).ToList();
if(customers.Count > 0)
{
salesPersonToAssign = customers.First().SalesPerson;
}
returnsalesPersonToAssign;
}


        public void InsertCustomer(Customers customer)        {            if (customer.Region == string.Empty)            {                customer.Region = RegionForCustomer(customer.CompanyName);            }            this.ObjectContext.AddToCustomers(customer);        }        public string RegionForCustomer(string p)        {            string region = "unsigned";            List<Customers> customers = GetCustomers().Where(c => c.CompanyName == p).ToList();            if (customers.Count > 0)            {                region = customers.First().Region;            }            return region;        }


添加命名的更新方法 named update method


  • 在Domain Services中,添加一个满足命名更新方法所需签名的方法。这个方法或者标记[Update]属性并设置UsingCustomMethod为true,或者接受一个实体作为第一个参数并没有返回值。下面的代码允许角色为CustomerRepresentative的用户重新设置客户的密码。
    ?
    1
    2
    3
    4
    5
    6
    7
    [RequiresRole("CustomerRepresentative")]
           publicvoidResetPassword(Customer customer)
           {
               // Implement logic to reset password
           }

     

当添加一个命名的更新named update方法,在客户端会生成两个方法。一个在Domain context上生成,另一个是由实体生成的,这个实体是这个named update方法的传递参数。从客户端可以使用这两种方式来调用named update方法。调用这个方法后,还需要掉调用SubmitChanges方法。

?
1
2
3
4
selectedCustomer.ResetPassword();
customerContext.SubmitChanges(OnSubmitCompleted,null);





添加一个可调用的操作
在Domain Services类中,添加一个标记[Invok]属性的方法。
下面的示例表示如何根据邮编来查询当地的气温。

?
1
2
3
4
5
6
7
[Invoke]
publicintGetLocalTemperature(stringpostalcode)
{
   // Implement logic to look up temperature
}


然后可以通过使用InvokeOperation(TValue)对象来调用这个方法。如下所示:

?
1
2
3
InvokeOperation<INT> invokeOp = customerContext.GetLocalTemperature(selectedPostalCode);


如何使用HTTPS与Domain Services
当我们想改善建立在Domain Services上的通信安全时,可以配置Domain Services只接受https上的请求。此时Domain Services将拒绝所有http上的请求。当Domain Services配置为应用于https时,相应的DomainContext类也对所有的请求使用https。
想使用https,我们需要配置下Web服务器。可以通过How to Set Up an HTTPS Service in IIS和Configuring HTTP and HTTPS获得详细信息。配置完服务器后,还需要下面的步骤来指定Domain Services使用HTTPS。
当应用EnableClientAccessAttribute属性时,设置REquiresSecureEndpoint为true,代码如下

?
1
2
3
4
[EnableClientAccess(RequiresSecureEndpoint =true)]
publicclassAuthenticationDomainService : AuthenticationBase<USER>

  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝发布宝贝没有品牌怎么办 烫了卷发显老怎么办 唯品会商品不支持退换货怎么办 京东没有自提怎么办 不支持七天无理由的商品怎么办 淘宝评价忘记点亮星星怎么办 淘宝宝贝权重降低了该怎么办 换卡支付宝账号怎么办 支付宝免密支付无法关闭怎么办 手机换了支付宝怎么办 支付宝版本过低怎么办 支付宝无故扣钱怎么办 支付宝里面的钱不见了怎么办 支付宝还不起钱怎么办 支付宝借不到钱怎么办 买家淘宝号被监控了怎么办 卖微信号被骗了怎么办 淘宝原密码忘了怎么办 淘宝号忘记密码了怎么办啊 淘宝忘了原密码怎么办 电脑账户密码忘了怎么办 淘宝的密码忘了怎么办 支付宝支付异常无法登录怎么办 笔记本电脑打不开光盘怎么办 电脑dvd弹不出来怎么办 安卓手机浏览器有个锁退不了怎么办 华硕电脑com端口没有怎么办 淘宝子账号认证过于频繁怎么办 现在手机淘宝卖家怎么办 注册新的淘宝账户怎么办 淘宝账号被限制买东西了怎么办 淘宝账号被冻结了怎么办 淘宝买的手机坏了怎么办 淘宝账户被限制登录怎么办 美团退款申诉失败怎么办 微信申诉不回来怎么办 特岗登录名忘记了怎么办 天猫账号被限制怎么办 微信双开被限制登录怎么办 云服务显出账号已过期怎么办 全国对讲机显示账号过期怎么办