WCF RIA 服务 (十)- Domain Services 3

本文介绍如何在DomainServices中实现商业逻辑,包括插入、更新、删除操作的自定义,添加命名更新方法及可调用操作。同时,讲解如何通过配置使DomainServices仅接受HTTPS请求以提升安全性,并提供了实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

在操作数据的方法中添加商业逻辑

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

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

 

ExpandedBlockStart.gif 代码
 1  public   void  InsertCustomer(Customer customer   
 2  {   
 3    if  (customer.SalesPerson  ==  String.Empty)   
 4    {   
 5      customer.SalesPerson  =  RetrieveSalesPersonForCompany(customer.CompanyName);   
 6    }   
 7    this .ObjectContext.AddToCustomers(customer);   
 8  }   
 9  [IgnoreOperation]   
10  public   string  RetrieveSalesPersonForCompany( string  companyname)   
11  {   
12    string  salesPersonToAssign  =   " unassigned " ;   
13    List < customer >  customers  =  GetCustomers().Where(c  =>  c.CompanyName  ==  companyname).ToList();   
14    if  (customers.Count  >   0 )   
15    {   
16      salesPersonToAssign  =  customers.First().SalesPerson;   
17    }   
18    return  salesPersonToAssign;   
19 

 


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

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

 

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

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

 


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

1  [Invoke]   
2  public   int  GetLocalTemperature( string  postalcode)   
3  {   
4       //  Implement logic to look up temperature   
5 

 

 

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

InvokeOperation<int> invokeOp = customerContext.GetLocalTemperature(selectedPostalCode); 
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  [EnableClientAccess(RequiresSecureEndpoint  =   true )]    
2  public   class  AuthenticationDomainService : AuthenticationBase < user >  

 

 

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/blackant2/archive/2010/04/08/5461489.aspx

转载于:https://www.cnblogs.com/e_trock/archive/2010/06/05/1751939.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值