(三)自定义方法的用法
客户端可以采取两种方式调用自定义方法:
(1)使用生成的域上下文(Domain Context),并且传递进实体作参数:
或者:
(2)使用实体自身进行操作:
(四)普通服务操作(简称"服务操作")
与前面讨论过的其他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();
}