我的webrole.cs似乎找不到连接字符串

时间:2012-03-24 08:53:43

标签: c# .net database entity-framework azure

我有一个基于Azure / Cloud的项目(仅限单个项目)。它有一个WCF / WebRole添加到项目中。我的WCF服务使用实体框架与SQLAzure数据库通信。这非常有效。

在项目的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=&quot;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&quot; " 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文件中已配置的内容。有什么东西我做得不正确或误解吗?

有人之前遇到过这个或者有任何想法吗?

2 个答案:

答案 0 :(得分:3)

看起来我对以下内容犯了错误: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

答案 1 :(得分:0)

一个简单而愚蠢的解决方案是添加app.config并在其中添加您需要的配置。然后从Run()方法(db连接字符串等)内部加载配置。它有效!

其他内容(服务等)托管在IIS中,您可以轻松地在那里加载web.config文件的配置。