ADOMD.NET 中的连接 - 使用连接和会话

在 XML for Analysis (XMLA) 中,会话在分析数据访问期间为有状态操作提供支持。 会话为分析数据源构成命令和事务的作用域和上下文。 用于管理会话的 XMLA 元素为 BeginSession、Session 和 EndSession。

当您开始会话、在会话过程中执行查询或检索数据,以及关闭会话时,ADOMD.NET 将使用这三个 XMLA 会话元素。

启动会话

对象的 SessionID 属性 AdomdConnection 包含与 AdomdConnection 对象关联的活动会话的标识符。 通过正确使用此属性,可以有效地控制应用程序中客户端和服务器的有状态性:

  • SessionID如果调用方法时 Open 未将属性设置为有效的会话 id,则 AdomdConnection 对象将从提供程序请求新的会话 id。 ADOMD.NET 通过将 XMLA BeginSession 标头发送到提供程序来启动会话。 如果 ADOMD.NET 成功启动会话,则 ADOMD.NET 会将属性的值 SessionID 设置为新创建的会话的会话 ID。

  • SessionID如果调用方法时 Open ,属性设置为有效的会话 ID,则 AdomdConnection 对象将尝试连接到指定的会话。

AdomdConnection如果对象无法连接到指定的会话,或者提供程序不支持会话,则会引发异常。

注意

在 ADOMD.NET 创建会话后,可以将多个 AdomdConnection 对象连接到该单一活动会话,也可以断开单个 AdomdConnection 对象与该会话的连接,然后将该对象重新连接到另一个会话。

在会话中工作

在 ADOMD.NET 将对象连接 AdomdConnection 到有效会话后,ADOMD.NET 将向提供程序发送一个 XMLA 会话 标头,其中包含应用程序对数据或元数据发出的每个请求。 每个请求都将会话 ID 设置为属性的值 SessionID

会话 ID 并不保证会话保持有效。 如果会话过期(例如,会话超时或者连接中断),访问接口可以选择结束和回滚该会话的操作。 如果发生这种情况,则 AdomdConnection 从对象进行的所有后续方法调用都将引发异常。 因为只有当下一个请求发送到访问接口而不是会话过期时才引发异常,所以应用程序必须能够随时处理这些异常,才能够从访问接口检索数据或元数据。

关闭会话

如果在 Close 未指定 endSession 参数值的情况下调用方法,或者如果将 EndSession 参数设置为 True,则与会话的连接和与 AdomdConnection 对象关联的会话都将关闭。 若要关闭会话,ADOMD.NET 会将 XMLA EndSession 标头发送到提供程序,并将会话 ID 设置为属性的值 SessionID

Close如果在将endSession参数设置为 False 的情况下调用方法,则与 AdomdConnection 对象关联的会话将保持活动状态,而与会话的连接将关闭。

管理会话的示例

下面的示例演示如何打开连接、创建会话以及关闭连接,同时保持会话在 ADOMD.NET 中处于打开状态:

Public Function CreateSession(ByVal connectionString As String) As String  
    Dim strSessionID As String = ""  
    Dim objConnection As New AdomdConnection  
  
    Try  
        ' First, try to connect to the specified data source.  
        ' If the connection string is not valid, or if the specified  
        ' provider does not support sessions, an exception is thrown.  
        objConnection.ConnectionString = connectionString  
        objConnection.Open()  
  
        ' Now that the connection is open, retrieve the new  
        ' active session ID.  
        strSessionID = objConnection.SessionID  
        ' Close the connection, but leave the session open.  
        objConnection.Close(False)  
        Return strSessionID  
  
    Finally  
        objConnection = Nothing  
    End Try  
End Function  
static string CreateSession(string connectionString)  
{  
    string strSessionID = "";  
    AdomdConnection objConnection = new AdomdConnection();  
    try  
    {  
        /*First, try to connect to the specified data source.  
          If the connection string is not valid, or if the specified  
          provider does not support sessions, an exception is thrown. */  
        objConnection.ConnectionString = connectionString;  
        objConnection.Open();  
  
        // Now that the connection is open, retrieve the new  
        // active session ID.  
        strSessionID = objConnection.SessionID;  
        // Close the connection, but leave the session open.  
        objConnection.Close(false);  
        return strSessionID;  
    }  
    finally  
    {  
        objConnection = null;  
    }  
}