WEB开发网
开发学院数据库MSSQL Server SSAS: 再谈谈如何控制会话(Session)及其销毁 阅读

SSAS: 再谈谈如何控制会话(Session)及其销毁

 2009-09-19 00:00:00 来源:WEB开发网   
核心提示:理解会话对于理解SSAS的编程比较重要,从名字上说,SSAS: 再谈谈如何控制会话(Session)及其销毁,Session还可以称为Dialog,或者Convensation等等,它们都表示这样一个意思:1. 它们需要预先建立2. 一旦建立之后, 查询级别(Query):在单一查询中可见,一般通过WITH语句来定义,

理解会话对于理解SSAS的编程比较重要。从名字上说,Session还可以称为Dialog,或者Convensation等等。它们都表示这样一个意思:

1. 它们需要预先建立

2. 一旦建立之后,那么在这个会话上可以进行多个操作,而且这些操作都可以共享一些会话级别的资源,例如变量值等等

3. 它们需要关闭,或者被自动回收

SSAS的会话是由服务器控制的,通常情况下,它的最小空闲时间是45分钟(2700秒),也就是说如果一个会话空闲了45分钟,那么它可能(只是可能)被回收。

为什么说只是可能呢?服务器并不一定会马上回收空闲的会话,这取决于另外一个参数(最大空闲时间),以及服务器内存是不是紧张了。

同样道理,而即便是你明确地发出了终止Session的指令,也不见得立即会回收。这仍然是取决于服务器的策略。不过,我们是建议使用完之后明确地关闭会话的,这样至少在我们程序的角度来说是一个好的设计。

在SSAS中,使用BeginSession的指令开始一个会话,这个会话会回复一个SessionID。然后,后续操作都可以使用这个SessionID指定与该会话的关联。在使用完之后,可以使用EndSession指令结束会话。

下面是一个BeginSession

SSAS: 再谈谈如何控制会话(Session)及其销毁

图片看不清楚?请点击这里查看原图(大图)。

它的回复大致是下面这样的,

SSAS: 再谈谈如何控制会话(Session)及其销毁

图片看不清楚?请点击这里查看原图(大图)。

这一段东西是编码过的,解开来之后,我们一般那可以看到一个SessionID

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header> 
<Session xmlns="urn:schemas-microsoft-com:xml-analysis" SessionId=“FF949531-EDA7-4AC4-8B50-17E0335085AC"/> 
</soap:Header><soap:Body><ExecuteResponse xmlns="urn:schemas-microsoft-com:xml-analysis"><return><root xmlns="urn:schemas-microsoft-com:xml-analysis:empty"/></return></ExecuteResponse></soap:Body></soap:Envelope> 

然后,我们再来看一下建立会话之后,后续操作应该怎么做。每个操作的头部都会带有一个Session的头,里面包含了指定的SessionID

SSAS: 再谈谈如何控制会话(Session)及其销毁

图片看不清楚?请点击这里查看原图(大图)。

最后,我们来看一下如何结束会话

SSAS: 再谈谈如何控制会话(Session)及其销毁

图片看不清楚?请点击这里查看原图(大图)。

这是它的工作原理。大家应该掌握。

那么,对于ADOMDConnection的属性SessionID属性,我们应该怎么样理解呢?

如果没有指定该属性,而当connection成功调用了open方法之后,会自动地将最新的SessionID赋予该属性

如果在调用open之前指定了该属性,那么将尝试连接到指定会话,如果会话不存在或者已经终止,则抛出异常(这里要注意捕获异常)

当调用Connection的Close方法 ,会自动地终止会话

也就是说,可以在一个连接没有关闭之前,进行多个操作,这些操作可以共享一些会话级别的资源,例如:计算成员,集等等

这里先预先提一下,有关SSAS对象的一些级别(后续有专门的文章介绍)

全局级别(global):在任何会话中都可见,例如维度成员,命名集,以及通过BIDS创建的计算成员,操作等等

会话级别(Session):在单一会话中可见,一般都通过CREATE SESSION … 这样的语句来创建的,例如CREATE SESSION SET….这是创建一个会话级别的集。

查询级别(Query):在单一查询中可见,一般通过WITH语句来定义,例如WITH SET。

Tags:SSAS 谈谈 如何

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接