如何从Azure WebJob访问Azure SQL数据库及连接报错排查
Azure WebJob连接字符串格式异常问题定位
根因
异常触发点和业务查询逻辑、依赖注入配置、Application Insights接入、部署前删除WinSCP.exe的操作均无关联,核心问题是名为Entities的EF数据库连接字符串格式非法:
- 本地调试阶段,Visual Studio会自动处理App.config中XML格式的转义字符
",将其正确解析为半角双引号,因此本地运行无异常 - 部署到Azure WebJob环境后,WebJob运行时不会自动处理这层额外转义,会将
"识别为连接字符串的普通内容,解析到索引197位置的非法字符时直接抛出System.ArgumentException: 初始化字符串的格式不符合规范,异常正好在首次执行数据库查询var configuration = repository.FirstOrDefault(filterPredicate);时触发。
修复方案
- 打开项目根目录下的
App.config文件,定位到connectionStrings配置节点下名称为Entities的连接字符串项 - 检查连接字符串内容,删除末尾多余的
"转义字符,确认所有"转义符都是成对出现、仅用于包裹连接字符串内部的数据库连接参数段,首尾无残留无匹配的转义字符
错误配置示例(末尾多了一个"):
正确配置示例:<add name="Entities" connectionString="metadata=res://*/EFModel.csdl|res://*/EFModel.ssdl|res://*/EFModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=tcp:xxx.database.windows.net,1433;Initial Catalog=xxx;User ID=xxx;Password=xxx;MultipleActiveResultSets=True;App=EntityFramework""" providerName="System.Data.EntityClient" /><add name="Entities" connectionString="metadata=res://*/EFModel.csdl|res://*/EFModel.ssdl|res://*/EFModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=tcp:xxx.database.windows.net,1433;Initial Catalog=xxx;User ID=xxx;Password=xxx;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> - 修改完成后重新生成项目,重新打包Debug目录为zip包上传部署即可,现有打包部署流程不需要调整。
补充校验方式
如果修改后仍触发同类异常,可通过WebJob对应的Kudu管理页面,进入site/wwwroot/app_data/jobs/[触发类型]/[你的WebJob名称]目录,下载运行时实际加载的配置文件,核对连接字符串内容是否和本地修改后的版本一致,排除打包过程中旧文件残留的问题。
内容的提问来源于stack exchange,提问作者Psychonaut007
相关产品推荐
相关产品推荐

