我试图将我目前作为Webjob运行的.NET应用程序转换为Azure函数。
应用程序访问Azure SQL数据库并从门户中的“应用程序设置”获取连接字符串。目前,这是网站应用服务中的应用设置(因为它是一个Webjob)。
所以我创建了一个Azure功能应用程序,创建了一个Powershell定时触发器,并且在Run.ps1中我有:
{
"error": {
"code": "BadRequest",
"message": "Resource not found for the segment 'asdfasdf'.",
"innerError": {
"request-id": "e86d84ab-f062-4780-af3c-9afae6e7bc82",
"date": "2017-02-08T18:53:29"
}
}
}
我已将连接字符串添加到功能应用程序的应用程序设置中,但是当我运行该功能时,我收到错误:找不到命名连接字符串myconnectionstring
如果我将连接字符串直接添加到MyApplication.exe.config中,那么它可以正常工作。它也可以作为Webjob完美运行。
有什么想法吗?
更新
以防万一这对未来的其他任何人都有帮助,以下是基于David的答案的Powershell:
Write-Output "PowerShell Timer trigger function executed at:$(get-date)";
cd D:\home\site\wwwroot\MyApplication\MyApplication.exe
Write-Output "PowerShell completed at:$(get-date)";
答案 0 :(得分:4)
实际上,如果您只是启动exe,那将无效。它在WebJobs中的工作方式是它复制你的exe并转换.exe.config来进行appsetting。
一个建议的解决方法是让您的应用程序依赖于myconnectionstring
环境变量而不是应用程序设置。这将起作用,因为所有进程都会自动继承所有这些env变量。
另一种解决方法是使用应用程序设置的虚拟值部署MyApplication.exe.config
,然后让PowerShell脚本在启动进程之前使用env变量的值执行字符串替换。如果转换尚未完成,请确保它仅重新保存文件,因为保存的操作将重新启动该功能。