我的webrole.cs似乎无法找到连接字符串
我有一个基于Azure/Cloud的项目(仅限单个项目)。它有一个WCF/WebRole添加到该项目。我的WCF服务正在使用实体框架与SQLAzure数据库交谈。这工作得很好。我的webrole.cs似乎无法找到连接字符串
在项目的web.config中我有以下几点:
<connectionStrings>
<add name="CommuteEntities" connectionString="metadata=res://*/Db.CommuteDataModel.csdl|res://*/Db.CommuteDataModel.ssdl|res://*/Db.CommuteDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=<db-here>.database.windows.net;initial catalog=dandr;persist security info=True;user id=<user-id-here>;password=<password-here>;multipleactiveresultsets=True;App=EntityFramework" " providerName="System.Data.EntityClient" />
</connectionStrings>
一切正常为止。所以我想做少量的预定后台处理(基于定时器而不是传入请求)。它的任务太小以至于无法为工作启动WorkerRole。
所以不是,我创建了类似的WebRole下列项目WebRole.cs
public override void Run()
{
while (true)
{
//This is for debug purposes:
string str = ConfigurationManager.ConnectionStrings["CommuteEntities"].ToString();
BackgroundProcessing.BackgroundProcessing.BackgroundProcess();
Thread.Sleep(150000); //2.5mins
}
}
出于某种原因,一线得到连接字符串似乎没有工作。但是,将相同的代码放入WCF服务中工作得很好。
为了强调,此解决方案中只有一个项目,并且WebRole.cs
与工作的WCF服务位于同一项目中。
注意:获取连接字符串仅用于调试目的。我有根本的问题是,当我WebRole.cs试图访问一个实体它得到下面的异常消息:
The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.
注2::我刚刚注意到,它会出现我的WebRole.cs
中的任何内容都无法看到在Web.config
文件中配置的任何内容。有没有我不正确或误解的东西?
有人遇到过这个或有任何想法吗?
貌似我倒下列犯规:Azure web role process not loading web.config?
从这个问题的答案:从个人通信
@stevemarx - “代码在webrole.cs在不同的过程从下IIS Web应用程序运行,虽然你当然可以打开web.config并阅读它(它只是当前目录中的一个文件),但.NET在web.config中不会做任何特别的事情(这将会像放置一个文件称为web.config在与您正在运行的控制台应用程序相同的目录中。)“
所以不,webrole.cs进程中的代码不会加载我的web.config。
一些更多的信息在这里:
http://laorient.blogspot.com/2011/06/windows-azure-webrolecs-is-not-running.html
一个简单的和愚蠢的解决方案是增加的app.config
并把在那里你所需要的配置。然后从Run()
方法(db连接字符串等)中加载配置。有用!
其余的东西(服务等)托管在IIS中,您可以轻松地在其中加载web.config
文件的配置。
我与达米安在这一个。我甚至会说你真的应该在云服务配置中加入类似的东西。此举还可以让您旋转凭据而无需重新部署应用程序。 – BrentDaCodeMonkey 2012-03-24 18:37:54