【问题标题】:My webrole.cs can't seem to find a connection string我的 webrole.cs 似乎找不到连接字符串
【发布时间】:2012-03-24 08:53:42
【问题描述】:

我有一个基于 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 文件中已配置的任何内容。是不是我做的不对或者有什么误解?

有人遇到过这个或者有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我和 Damien 一起做这个。我什至会说你真的应该把这样的东西放到你的云服务配置中。这一举措还允许您轮换凭据,而无需重新部署您的应用程序。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多