在Azure云服务托管上使用SQL Server CE 3.5使用Web角色

时间:2013-03-27 11:58:38

标签: sql azure sql-server-ce windows-ce

我们使用Web角色在Azure Cloud Hosting服务上托管了一个asp.net 4.0应用程序。我们使用SQL Server CE 3.5 dll并将一些数据插入.sdf文件。打开与SQL Server CE .sdf文件的连接时收到以下错误消息。

  

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

尝试DbProviderFactories,web.config中的运行时标记仍然是相同的。并且还尝试了可解决的可部署依赖选项以及SQL Server Compact的私有安装,如本文所述。 http://www.codeproject.com/Articles/33661/Creating-a-Private-Installation-for-SQL-Compact,仍有问题。

如果我使用SQL Server CE 4.0,它工作正常,它可以插入数据并返回.sdf文件。但是使用SQL Server CE 3.5会出现上述错误,我们需要特别注意3.5,因为我们要通过Web服务将此.sdf文件发送到移动应用程序。

如何在Azure云托管服务上使用SQL Server CE 3.5?任何建议都受到高度赞赏。

感谢和问候, 哈利。

1 个答案:

答案 0 :(得分:1)

它可能是环境的 - 你能测试这两个陈述的价值:

string envVar = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");

Assembly entryAssembly = Assembly.GetEntryAssembly();
string str2 = (entryAssembly == null) ? string.Empty : Path.GetDirectoryName(entryAssembly.Location);

(这是3.5 SP2 ADO.NET提供程序中的代码) - str2应该是您的Web应用程序bin文件夹的路径 - envVar应该是处理器体系结构的文件夹名称(X86或AMD64)

在4.0中,获得路径(str2)的逻辑已得到改进:

string localPath = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath;
Path.GetDirectoryName(localPath);

我认为4.0中的逻辑已得到改进,以更好地支持Web部署。换句话说:不支持使用SQL Server Compact 3.5 SP2的专用Web部署。

选项:使用安装了3.5 SP2的主机,使用4.0并修改文件的版本标头(未尝试过,但可以选择)请参阅http://erikej.blogspot.dk/2010/08/how-to-upgrade-version-3x-database-file.html