【问题标题】:SQL Server CE on Azure websiteAzure 网站上的 SQL Server CE
【发布时间】:2014-10-06 02:30:03
【问题描述】:

尝试在 Azure 网站上运行 SQL Server CE,但出现错误:

无法加载与版本 8876 的 ADO.NET 提供程序对应的 SQL Server Compact 的本机组件。请安装正确版本的 SQL Server Compact。有关详细信息,请参阅知识库文章 974247

【问题讨论】:

  • 我不确定您是否可以依赖 Azure 上的文件系统

标签: azure sql-server-ce


【解决方案1】:

您不能在 Azure Web Sites 上使用 SQL Server CE。使用 Azure 网站,您必须使用外部数据库 - 例如 Azure SQL DatabaseMySQL

一般而言,对于云和任何云服务(IaaS、PaaS、SaaS),您永远不应依赖本地文件系统,而应将文件保存在持久存储(如 Azure Blob 存储)上。因此,您不能(不应)使用 SQL Server CE 等服务。

【讨论】:

  • 我同意您提出的“最佳实践”,但我的客户缺乏做出良好 IT 决策的能力。我的最终部署可能是 SQLServerCE——对于任何多线程应用程序来说都是一个糟糕的选择,但我只会有几个用户。通过使用 SqlCE,如果我们需要更多用户,我可以轻松迁移到 SQLServer,同时能够在 Azure 服务器上展示进度,而不是客户的残缺和恶化环境。他们对 SQLServer 有制度上的偏见,而 ORacle 从未发布过 EF6 的提供程序。
【解决方案2】:

这似乎有效:

  • 参考 System.Data.SqlServerCe 4.0,设置“复制本地”=true。
  • Azure 作为 x86 进程(不是 Amd)运行: Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
  • 在开发机器上找到 SQLServerCE 依赖项: C:\ProgramFiles\Microsoft SQL Server Compact Edition\v4.0\Private\x86
  • 在 Web 项目中创建 SqlServerCE\x86 文件夹。
  • 将 x86 文件复制到新的 x86 文件夹中: sqlceca40.dll sqlcecompact40.dll sqlceer40EN.dll sqlceme40.dll sqlceqp40.dll sqlcese40.dll
  • 将此块添加到 global.asax 中 application_start 的 顶部

        string dest = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath;
        string src = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "SqlServerCE\\x86";
    
        foreach (var file in Directory.GetFiles(src))
        {
            var fileinfo = new FileInfo(file);
            string destpath = Path.Combine(dest, fileinfo.Name);
    
            if (!File.Exists(destpath))
            {
                fileinfo.CopyTo(destpath);
            }
        } 
    

注意:我对这个解决方案不满意,但我不知道如何在部署时将文件放入 bin 文件夹。构建后事件似乎不起作用。如果有人有更好的解决方案,请提出建议。

【讨论】:

  • 如果您想要健康的服务并且不想与未知和不可预见的错误和问题作斗争,则不应在 Azure 网站上执行此操作...
  • @astaykov 很高兴听到替代方案,如“您可以使用 Web 角色/云服务”添加额外的安装步骤,而不是简单的“不,您不能在 Azure 上这样做”,不会你不同意吗?
  • 不,我不同意!即使您在 Web 角色上安装 SQL Server CE 组件,您也不应该这样做! Web/Worker 角色的存储是不可靠的,因为您的实例可能随时进出。唯一可行的解​​决方案是拥有一个 VM (IaaS),这不是理想的云解决方案,对于您的情况,我不会选择 VM。我已经在我的原始答案中列出了替代方案!
  • 我认为 astaykov 没有做到这一点。在 SQL Server 禁止的一个非常小的网站上工作。我计划将其部署到服务器。我使用 Azure 作为演示位置。
  • 为什么? 1) 客户几乎不可能使用 SQL Server。 2) 我需要一个 SQL 数据库。 3) 我需要一个客户可以使用的演示服务器。我本可以使用 TinySQL 或其他基于文件的系统。我知道他们不会为两个以上的用户工作,但我只有一个。如果客户决定他们需要两个用户,那么他们就必须弄清楚要在哪个数据库上运行。 (你不能解决愚蠢的问题)出于我的演示站点的目的,这很好用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 2012-01-31
相关资源
最近更新 更多