我尝试创建一个由http请求触发的Azure函数,然后从SQL数据库中选择数据,然后返回数据。
我尝试按照以下示例设置一个简单连接到数据库的基本示例:https://msdn.microsoft.com/library/mt715784.aspx 它不是Azure功能特定的,但我认为它应该运行:
var Connection = require('tedious').Connection;
var config = {
userName: 'userName',
password: 'password',
server: 'databaseServer.database.windows.net',
options: {encrypt: true, database: 'AdventureWorks'}
};
module.exports = function(context, req, saasSql) {
var connection = new Connection(config);
connection.on('connect', function(err) {
if(err) {
context.log(err);
} else {
context.log("Connected");
context.res = {
body: 'Connected'
};
context.done();
}
});
};
然而,当它运行时(在管理控制台中触发)。我收到一条日志消息,说该函数已启动,然后在日志中没有其他内容。底部的“输出”窗口显示状态:502 Bad Gateway和此消息: 为功能应用启用了身份验证。在运行该功能之前禁用身份验证。
我想这是因为我没有调用context.done(),因为此功能的身份验证已关闭。我似乎无法弄清楚如何从连接尝试中获取任何错误信息等,我也试图绑定到错误事件,但没有任何事情被解雇。
更新
错误消息是Azure Functions代码中的错误,并显示错误的错误。但是,上面的代码仍然没有运行(并且没有抛出错误)。当我创建本地节点服务器并以这种方式运行时,它运行正常,因此在Azure Functions框架中运行似乎是一个问题。有没有办法从Azure功能连接到SQL DB?
答案 0 :(得分:0)
错误消息"Authentication is enabled for the function app. Disable authentication before running the function."
表示您已启用功能应用的Authentication / Authorization feature。这将阻止门户网站调用您的Http函数,因为需要进行身份验证。请注意,此身份验证与您在功能门户中配置的功能级别身份验证不同。
因此,目前唯一可行的方法是让您按照错误消息执行操作 - 禁用功能应用程序级别身份验证。我们的仓库中有一个跟踪项目可以改善这一点(issue here)。