3

我正在寻找使用 Azure 移动服务创建计划作业。

由于该服务最终会调用另一个云服务(网站),我想知道移动脚本是否可以访问云服务已经访问的数据库。

我知道您可以指定一个用于移动脚本的数据库(我选择免费进行日志记录),但似乎无法判断您是否可以通过API访问其他数据库。

var todoItemsTable = tables.getTable('TodoItems');

假设...

var todoItemsTable = databases.getDatabase('NonMobileSqlDb').tables.getTable('TodoItems');

我已经检查过这个问题(Can you mix Azure Mobile Services with Azure Cloud Services?),但它似乎没有涵盖与数据库对话的脚本。

一些背景...

移动服务将(按计划)调用执行例行操作的 Web 服务(经过授权)。我想锁定这个服务(没有 ssl),一种方法是生成一个服务可以使用的密钥,云服务可以验证。该密钥将存储在数据库中,既可以访问,也只能在短时间内使用。

4

1 回答 1

4

是的你可以。

您需要使用从操作指南中获取的以下示例(使用Node.js)进行连接:

要使用 node-sqlserver,您必须在应用程序中要求它并指定连接字符串。连接字符串应该是本文的如何:获取 SQL 数据库连接信息 部分中返回的 ODBC 值。代码应类似于以下内容:

var sql = require('node-sqlserver');
var conn_str = "Driver={SQL Server Native Client 10.0};Server=tcp:{dbservername}.database.windows.net,1433;Database={database};Uid={username};Pwd={password};Encrypt=yes;Connection Timeout=30;";

可以通过使用查询方法指定 Transact-SQL 语句来执行查询。以下代码创建一个 HTTP 服务器,并在您查看网页时从 Test 表中的 ID、Column1 和 Column2 行返回数据:

var http = require('http')
var port = process.env.port||3000;
http.createServer(function (req, res) {
    sql.query(conn_str, "SELECT * FROM TestTable", function (err, results) {
        if (err) {
            res.writeHead(500, { 'Content-Type': 'text/plain' });
            res.write("Got error :-( " + err);
            res.end("");
            return;
        }
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        for (var i = 0; i < results.length; i++) {
            res.write("ID: " + results[i].ID + " Column1: " + results[i].Column1 + " Column2: " + results[i].Column2);
        }
        res.end("; Done.");
    });
}).listen(port);

非常感谢@GauravMantri 和@hhaggan 帮助他们走到了这一步。

于 2013-07-25T09:08:09.360 回答