【问题标题】:Publishing Azure web app puts a connection string inside a connection string发布 Azure Web 应用程序将连接字符串放入连接字符串中
【发布时间】:2020-08-29 20:27:05
【问题描述】:

我有一个 Azure Web 应用程序 (https://www.triviaweb.net/) 和 web.config 中的连接字符串,如下所示。

  <connectionStrings>
    <add name="Entities" connectionString="metadata=res://*/TriviaWebModel.csdl|res://*/TriviaWebModel.ssdl|res://*/TriviaWebModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=tcp:dolaris.database.windows.net;initial catalog={cata};persist security info=True;user id={usr};password={psw};multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
  </connectionStrings>

当我使用 Visual Studio 2019 版本 16.7.2 将 Web 应用程序发布到 Azure 时,web.config 会转换为此。

  <connectionStrings>
    <add name="Entities" connectionString="metadata=res://*/TriviaWebModel.csdl|res://*/TriviaWebModel.ssdl|res://*/TriviaWebModel.msl;provider=System.Data.SqlClient;provider connection string='metadata=res://*/TriviaWebModel.csdl|res://*/TriviaWebModel.ssdl|res://*/TriviaWebModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=tcp:dolaris.database.windows.net;initial catalog={cata};persist security info=True;user id={usr};password={psw};MultipleActiveResultSets=True;App=EntityFramework&quot;'" providerName="System.Data.EntityClient" />
  </connectionStrings>

看起来这种转换是在连接字符串中放置一个连接字符串。我可以在服务器上手动修复此问题以使我的应用程序正常工作,但更希望发布工作正常。

我从来没有见过这样的事情。

【问题讨论】:

  • 有什么区别?
  • 看部分“provider connection string='metadata=res://*/TriviaWebModel.csdl|res://*/TriviaWebModel.ssdl...”

标签: azure azure-sql-database azure-web-app-service


【解决方案1】:

提供者连接字符串包含数据提供者的有效关键字/值对。无效的提供者连接字符串在被数据源求值时会导致运行时错误。

确保根据ADO.NET connection strings 的一般语法对值进行转义。例如,考虑以下连接字符串:Server=serverName; User ID = userID。它必须被转义,因为它包含一个分号。由于它不包含双引号,因此它们可以用于转义:

Provider Connection String ="Server=serverName; User ID = userID";

尝试更改您的连接字符串:

<add 
  name="Entities" 
  connectionString="metadata=res://*/TriviaWebModel.csdl|res://*/TriviaWebModel.ssdl|res://*/TriviaWebModel.msl;
  provider=System.Data.SqlClient;
  provider connection string=&quot;
  data source=tcp:dolaris.database.windows.net;
  initial catalog={cata};
  persist security info=True;
  user id={usr};
  password={psw};
  multipleactiveresultsets=True;
  application name=EntityFramework&quot;" 
  providerName="System.Data.EntityClient" />

到:

<add
  name="Entities"
  connectionString="metadata=res://*/TriviaWebModel.csdl|res://*/TriviaWebModel.ssdl|res://*/TriviaWebModel.msl;"
  provider= "System.Data.SqlClient"
  providerConnectionString="data source=tcp:dolaris.database.windows.net;
  initial catalog={cata};
  persist security info=True;
  user id={usr};
  password={psw};
  multipleactiveresultsets=True;
  application name=EntityFramework;"
  providerName="System.Data.EntityClient" />

更多信息,您可以访问Connection Strings in the ADO.NET Entity Framework.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多