0

我通过 Web-Role 将我的 ASP.NET MVC 4 Web 项目(SimpleMembershipProvider,EF CF)推送到 Windows Azure 到 Azure 云服务。在我的 Web 项目中,我使用位于“App_Data”下的 CE4 数据库 (.sdf) 数据库。

发布过程完成后,我在浏览器中打开我的网站,我收到以下错误:

不允许访问数据库文件。[ 1914,文件名 = E:\sitesroot\0\App_Data\xyzDb.sdf,SeCreateFile]

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.SqlServerCe.SqlCeException:不允许访问数据库文件。[1914,文件名 = E:\sitesroot\0\App_Data\LivescoreDb.sdf,SeCreateFile]

为了让站点运行,我通过远程桌面将我的远程桌面连接到我在 azure 上的虚拟系统,并且必须将“网络服务”帐户“Wite Access”提供给“E:\sitesroot\0\App_Data”文件夹。

我的 Web.Config 连接字符串:

name="xyzConnection" connectionString="数据源=|DataDirectory|\xyzDb.sdf" providerName="System.Data.SqlServerCe.4.0"

之后我的网站运行!

我有可能改变这种不良行为。

例如,我试图在项目中更改我的数据库文件的位置,但后来我找不到将相对路径放置到连接字符串的方法。

谢谢

4

1 回答 1

0

也许这篇文章可以提供帮助(见底部)。

我认为,总的来说,在 Azure 中使用 SQL CE 数据库并不是一个可以很好地涵盖所有情况的方案,例如:

  1. 如果您最终需要该 Web 角色的多个实例,他们每个人都将拥有自己的数据库副本,因此您的用户可能会根据他们点击的实例看到不一致的行为
  2. 如果您将应用程序再次部署/刷新/重新启动到 Azure,则无法保证 App_Data 文件夹中的数据(或文件系统上的任何文件,实际上)将被保留(更有可能会被删除)所以如果您的用户已将数据输入数据库(通过您的应用程序),您更新了应用程序,他们回来后可能会发现所有工作都丢失了

因此,根据您的用例,您可能会发现自己承担了相当大的风险(除非您从未更新应用程序代码或需要为您的应用程序提供超过 1 个 Web 角色实例)。

“更好”(用引号括起来,因为它可以是一个相对术语或一个带有含义的术语)是使用SQL Azure作为您的云数据库,如果您没有访问权限,您可以使用例如SQL Express在本地进行数据库开发到本地的任何其他 SQL Server 版本。这将克服多个 Web 角色的问题(因为您的数据库独立于它们中的任何一个),并且如果您需要重新部署(或类似)到您的 Web 角色,因为数据位于单独的数据存储中。

警告:我不确定你会发现从 SQL CE 到另一个 SQL 版本有多少工作,但是似乎有为此定义的途径,例如这里这里这里这里

于 2013-03-24T17:26:14.620 回答