如何使用 ConnectionString 中提供的凭据连接到表格多维数据集服务器?

Cod*_*ody 6 c# ssas tcp ssas-tabular

微软说:

https://learn.microsoft.com/en-us/analysis-services/instances/connection-string-properties-analysis-services?view=asallproducts-allversions

“当通过 TCP 连接到 SSAS 时,客户端库将使用指定的用户名和密码模拟 Windows 用户,然后照常连接到服务器。”

“通过 HTTP(S) 连接到 SSAS 时,凭据将根据 Web 服务器上配置的身份验证模式(例如基本身份验证或 Windows 身份验证)提供给 Web 服务器。Web 服务器将在连接到之前执行适当的 Windows 模拟SSAS 服务器,因此向服务器提供正确的凭据流。”

但是,当我这样做时:

 using Tabular = Microsoft.AnalysisServices.Tabular;

 using (Tabular.Server server = new Tabular.Server())
 {   
    //connectionString = "Provider=MSOLAP;DataSource=ServerIP;UserID=xx;Password=xx;Persist Security Info=True;Impersonation Level=Impersonate;"

    server.Connect(connectionString);
 }
Run Code Online (Sandbox Code Playgroud)

它使用运行代码的用户帐户的凭据,而不是 ConnectionString 中的用户 ID 和密码。

我怎样才能让它通过“TCP”连接?

更新:使用@GregGalloway 的建议和这里的逻辑:我已经实现了一个 Impersonator 类。我用它更新了我的代码以执行以下操作:

using (Tabular.Server server = new Tabular.Server())
{
     using (new Impersonator("UserName", "Domain", "Password"))
     {
           server.Connect(connectionString);
     }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我分析对 SSAS 服务器的调用时,我可以看到它仍然使用与以前相同的凭据,并且无论传递给构造函数的任何凭据如何,与服务器的连接都会成功。单步查看代码,我可以看到在任何时候都没有抛出异常。

Gre*_*way -1

如果您的应用程序或 Web 应用程序尚未在这些凭据下运行\xe2\x80\x99,那么您需要在连接之前在代码中模拟该身份。这是一个例子

\n