2011-09-27 107 views
-1

我很难部署我的网站。 我得到了一些错误,他们得到解决,我成功地发布了我的网站,但当我尝试打开任何页面时,它会给我404或500错误数据库部署问题

我的主机提供商告诉我,如果此页使用数据库,没有部署那么这可能是问题 所以我试图部署我的数据库,我得到connectionString错误。

的问题是,我不存储我的connectionString在web.config 它保存在我的基地DAL类的属性和它的使用所有的DAL类 所以我更新了,但我得到同样的错误

我不知道什么是错的,我应该在web.config中包含connectionString?

N.B当我构建软件包并尝试将活动模式设置为'release'时,它将设置返回到'debug'!

+0

尝试使用VS调试器模式连接到您的远程数据库,并查看异常情况。 – mservidio

+2

数据库是否托管在可从托管服务提供商处访问的地方? – alun

+0

@mservidio ..我试图从VS2010访问我的数据库,它是成功的,我没有遇到任何问题,我跑了查询和东西 – lKashef

回答

-1

对不起创建,但所有的答案告诉我,我需要把“的ConnectionString”在“网络。配置',但实际上,当我将我的应用程序添加到虚拟目录时,整个问题得到了解决,我不需要更改我的DAL层或添加任何内容到web.config

当然,我从你的答案中学到了,欣赏它,但不,我不需要添加任何东西在我的web.config如果我决定有这种设计模式。

1

“我应该在web.config中包含connectionString吗?”

是的,您的连接字符串应该在web.config的<connectionStrings>部分定义正是这个原因 - 让您可以轻松地更改设置将应用程序部署到不同的时,指向不同的数据库环境环境,而不需要重新编译你的代码。

+0

好吧,但我已经在我的基地DAL类中定义了一个connectionString,并且我将它更新为设置为我的新数据库connectionString。当我发布它已经重建我的类和创建一个新的DLL,我错了吗? – lKashef

1

IIS在配置文件中识别您的连接字符串。我看到它在查看某个应用程序时通过IIS管理控制台公开它们。我曾经有类似的问题,结果证明这是一个身份验证问题。 IIS上的应用程序在某个池中和某个用户下运行。如果您指定在连接字符串中使用Windows身份验证(集成安全性),则该用户必须有权访问数据库。如果运行应用程序的用户没有连接数据库的必要权限,则应在连接字符串中明确指定用户名和密码。

在任何情况下,你可以在你的web.config打开includeExceptionDetailInFaults,并得到一点点,为什么你的服务失败,像这样的详细信息(msdn):

<serviceBehaviors> 
    <behavior> 
    <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
</serviceBehaviors> 
+0

我认为这很好,但我有一个共享主机帐户,所以我需要指定一个用户,并通过,我已经在我的connectionString声明它。也许问题是关于我的问题..例如我的sql语句是这样的“SELECT * FROM Table1 not user.Table1 ..我必须改变我的整个DAL包括数据库用户?.. btw我声明我的connectionString在一个类为了保护它免受使用我的应用程序修改它的任何人,所以我可能是唯一一个可以让这个应用程序工作的人,那么这是错误的吗? – lKashef

+0

你不能真正“保护”连接字符串。你可以防止人们修改它,但是为什么你想要这样做有点令人质疑,保证这些信息的唯一方法就是完全移除它并让用户或最终用户提供它,当然在运行的应用程序中在IIS上是没有办法的,但是要包含它,但是如果你将它包含在配置中,你仍然可以在本地IIS上这样做,而且你不必将这个字符串发送到其他地方。 – Andreas

+1

关于你的查询,我不知道不认为这应该是一个问题,如果那么你需要用方案名称来限定它(dbo是默认名称)。而且你还必须考虑查询在本地工作。你是否已经试图获得确切的异常细节?我认为对于调试你应该暂时把它打开,否则你只会猜测。 – Andreas

1

假设你的DAL是一个类库,我会将连接字符串存储在app.config中。这样,您可以轻松更改连接字符串,而无需在每个使用该库的Web应用程序中放置连接字符串。

+0

是的,它是一个类库。我有一个基类,所有我的DAL类继承。在基类中,我有属性ConnectionString,它在开发阶段中设置,在完成之后,它在DLL中受到保护,并且从此基类继承的任何类都可以非常轻松地使用属性ConnectionString。唯一需要了解我的数据库的层,它的connectionString是DAL ..所以我的Web应用程序永远不需要知道connectionString是什么..我试图给你更多关于我的设计的细节,希望你能帮助 – lKashef

+1

如果您具有'ConnectionString'属性从库的app.config中提取连接字符串,则您的设计将更加灵活。如果您担心安全问题,请在部署后加密连接字符串部分。 –

+0

好吧,如果我这样做了,我不需要web.config中的任何connectionStrings? ..和btw在哪里可以找到app.config? – lKashef

1

“问题是我没有在web.config中存储我的connectionString它存储在我的基类DAL类中的一个属性中,它被所有的DAL类使用,所以我更新了它,但是我得到了同样的错误”

是的,硬编码连接字符串是一个主要问题。要回答你的下一个问题“我应该在web.config中包含connectionString?”,答案是YES。

至于数据库的正确部署,你可以看看我this blog entry 2008年

+0

好的,但connectionString将位于Web应用程序项目中,我的DAL位于单独的类中图书馆..我将如何能够从我的DAL访问它? – lKashef

+0

如果你不能从配置中奇迹般地获取连接字符串,你会如何看待它到达DAL类?获得它的机制很简单:将它作为参数传递给调用以获取数据的方法。我假设,既然你有它的硬编码,你已经有了设置连接字符串的机制。 –

+0

嗯所以每次我连接到数据库我应该通过ConnectionString? ..现在有必要将其存储在web.config中以避免硬编码connectionString的问题,并且仍然可以从我的DAL类库访问web.config连接字符串? – lKashef