技术开发 频道

Silverlight 3 RIA服务编程中使用自定义方法及服务操作

 (三)自定义方法的用法

 客户端可以采取两种方式调用自定义方法:

 (1)使用生成的域上下文(Domain Context),并且传递进实体作参数:

 catalog.DiscountProduct(selectedProduct, percentage);

 或者:

 (2)使用实体自身进行操作:

 selectedProduct.DiscountProduct(percentage);

 (四)普通服务操作(简称"服务操作")

 与前面讨论过的其他DomainService类型相比,普通服务操作更酷似传统的Web方法。当服务器端的逻辑不适合于创建/更新/删除模式时,你可以选择使用普通服务操作。不同于其他DomainService操作的是,普通服务操作没有变更跟踪或延迟执行支持。这就是说,一旦在客户端发出了方法调用,普通服务操作即被提交给服务器端。

 (五)普通服务操作的声明

 没有命名约定的标记的方法被识别为一个普通服务操作。为了把一个方法标记为一个普通服务运行,请使用ServiceOperation属性加以标记。下面的示例服务操作将获取与指定产品相关联的竞争对手的价格。注意,通过前面的提示你也可能已经猜出,此代码应加在DomainService Catalog的内部。

 [ServiceOperation]

 public decimal GetCompetitorsPrice(Product product)

 {

 // Do some kind of price lookup.

 return product.ListPrice * 0.95m;

 }

 参数和ServiceOperation的返回类型必须是一个实体,或是一个预定义的序列化类型。

 (六)使用普通服务操作

 需要在此指出的是,像RIA服务框架内其他的操作一样,普通服务方法的执行也是异步的。有三种方法可以访问普通服务操作的返回值。开发人员可以:

 ①直接绑定到InvokeOperation.Value,像这样:

 InvokeOperation<decimal> invokeOp = catalog.GetCompetitorsPrice(selectedProduct);

 compPrice.Text = invokeOp.Value.ToString();

 ②也可以使用传递回调函数的方式,类似如下:

 catalog.GetCompetitorsPrice(selectedProduct,

 (invokeOperation) =>

 {

 compPrice.Text = invokeOperation.Value.ToString();

 }, null);

 ③还可以使用注册事件处理器函数的方式:

 InvokeOperation<decimal> invokeOp = catalog.GetCompetitorsPrice(selectedProduct);

 invokeOp.Completed += new System.EventHandler(invokeOp_Completed);

 void invokeOp_Completed(object sender, System.EventArgs e)

 {

 InvokeOperation<decimal> invokeOp = (InvokeOperation<decimal>)sender;

 compPrice.Text = invokeOp.Value.ToString();

 }

0
相关文章