我们可以在RIA服务中没有成员变量吗?

时间:2011-03-18 18:51:41

标签: silverlight silverlight-4.0 wcf-ria-services

我在服务器端创建了一个简单的RIA服务,并在客户端上创建了它的相应上下文。我的RIA服务中只有2 [Invoke]个操作。在第一个调用中,我调用第一个方法并设置一个私有实例级变量。但是当我调用第二种方法时,变量不再保留该值。它变为空。为什么会这样?我已经在客户端上为方法调用提供了相同的DomainContext,那为什么会发生这种情况呢?是否禁止在RIA服务中拥有任何实例变量?

提前致谢:)

1 个答案:

答案 0 :(得分:2)

在这种情况下,您不能拥有私有成员,因为两个调用之间的DomainContext实例实际上是单独的对象。每个调用都是以原子方式进行的,服务器部分在使用后创建并清理对象。

一种选择是将您的呼叫的有状态性质从服务器转移到客户端。让第一个方法作为具体类返回一个封装您希望跟踪的私有值的模型。然后,您可以在客户端中使用该模型来调用第二个实例方法。如果你不想通过网络传输这些数据,那么这不是一个好的选择。

第二个选项是简单地利用ASP.NET的Session或Cache对象,因为Silverlight确实在ASP.NET上下文中运行。 HttpContext.Current可用于您的服务并与用户耦合。

另一种选择是简单地将两种方法链接到一个调用方法中。