c# - Mono Develop Microsoft Authentication for Microsoft Analysis 服务器

标签 c# authentication unity3d mono ssas

对于我的研究,我需要能够使用 Unity 游戏引擎查询 Microsoft 分析服务器 (2012) 数据立方体。 对于连接,有一个 需要 Microsoft 身份验证Unity 正在使用 Mono Develop 库进行 SQL 连接,这给我带来了问题。到目前为止,我还没有找到让 Mono 能够使用 Microsoft 身份验证的解决方案。

我想找到一种在客户的域内使用 windows 身份验证 的好方法。由于最终应用程序必须能够连接到数据立方体,最好使用连接字符串

使用允许使用 SOAP 的 HTTP 连接的 IIS 服务器 的数据立方体并不总是可用,具体取决于客户设置。 此外,在多个平台上构建应用程序的愿望使得添加自定义库变得困难,即使这个请求有一个自定义库,因为我无法找到还有一个。

我目前不幸的一面是:

  • 使用 visual studio 构建一个额外的 windows 应用程序,查询数据并将其解析为 Unity(但是需要额外的应用程序来 跑)。
  • 使用带有 IIS 服务的 http SOAP 连接(但需要使用 IIS 设置分析服务器,这并非总是可行,具体取决于客户)。
  • 找到一个允许我使用 Microsoft 身份验证 的库(但可能只适用于 Windows 平台,或者不适用于 Unity)。

我希望有人已经找到或者可能知道一个适用于 Unity 的好解决方案,并且没有我上面提到的限制。


我正在使用 Microsoft.AnalysisServices.AdomdClient;使用 visual studio 可以很好地构建 visual studio,但不能在 monodelop 中统一使用。

try
        {
            using (AdomdConnection adcon = new AdomdConnection(connectionString))
            {
                adcon.Open();
                using (AdomdCommand adcmd = adcon.CreateCommand())
                {
                    adcmd.CommandText = textBox3.Text.ToString();
                    AdomdDataReader dr = adcmd.ExecuteReader(CommandBehavior.CloseConnection);

                    while (dr.Read())
                    {
                        for (int i = 0; i < dr.FieldCount; i++)
                            textBox2.AppendText(dr[i] + (i == dr.FieldCount - 1 ? "" : ", ") + Environment.NewLine);
                    }
                    dr.Close();
                    textBox2.AppendText(adcmd.CommandText.ToString() + Environment.NewLine + Environment.NewLine);

                    adcmd.Connection.Close();
                }

                adcon.Close();
            }
        }
        catch(Exception e)
        {
            textBox2.AppendText(e.ToString() + Environment.NewLine);
        }

感谢您的任何建议、反馈或回答!

最佳答案

您可以尝试使用关系型 SQL Server 引擎作为一种代理。只要 Analysis Services 可用,关系型 SQL Server 引擎就应该可用。

您可以在关系 SQL Server 中设置一个链接服务器,它使用 Analysis Services OLEDB 客户端链接到 Analysis Services 服务器。描述了如何设置链接服务器 here .

然后您可以将 MDX 发送到此链接服务器,并像这样在关系引擎中取回结果:

select * from openquery(AdventureWorksOLAP, 
         'select [Measures].[Sales Amount] on columns from [Adventure Works]')

其中 AdventureWorksOLAP 是链接服务器的名称。

但是,您应该知道列名很奇怪(包含右方括号,需要通过加倍在包含列名的方括号内进行转义)。例如上面的查询将有一个列,您必须以 [[Measures]].[Sales Amount]]] 的形式访问该列。此外,所有单元格值都以 nvarchar 形式返回,可能需要转换为数字类型才能使用它们。

也许您可以将列名称更改和列类型转换封装到存储过程中。

并且您可以使用 SQL 服务器身份验证来访问关系数据库。

关于c# - Mono Develop Microsoft Authentication for Microsoft Analysis 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26524598/

相关文章:

c# - 使用 LINQ 选择字典 <T1, T2>

c# - 集合初始化语法,有什么用?

c# - .net 中 ObservableCollection 的用途是什么?

asp.net、wcf 身份验证和缓存

android - Ionic View Google 登录弹出窗口在 Firebase 2 中有效,但在 Firebase 3 中无效(在浏览器中有效)

azure - 用于 Azure AD B2C 和 Xamarin 的 MSAL 或 ADAL 库

c# - 编译器/JIT 能否将嵌套的 usings 合并到一个 try/catch block 中?

c# - 如果对象元素根标记不存在,如何将 XML 反序列化为对象?

c# - 在 Unity 中打电话?

unity3d - Soomla OnRestoreTransactionsFinished 总是收到 TRUE