【问题标题】:How does one access relational data (sql azure) through azure mobile services?如何通过 azure 移动服务访问关系数据(sql azure)?
【发布时间】:2013-06-24 22:24:55
【问题描述】:
在过去 3-4 小时内,我一直在寻找有关 azure 移动服务如何工作的优秀教程和文档。我一直在学习如何创建移动服务、连接现有数据库或创建新数据库以及访问存储在移动服务本身创建的表中的数据的教程。与移动服务中创建的存储表相比,我在哪里可以找到如何准确访问实际数据库本身。我不明白为什么不能直接从数据库访问数据而不是从这个“移动服务”访问数据,除非这个东西实际上按照 OData 服务的工作方式工作,提供抽象数据模型来保护底层数据结构.
我的问题是:
如何通过我的 azure 移动服务访问我的 Sql Azure Db(关系结构)?
【问题讨论】:
标签:
azure
azure-sql-database
azure-mobile-services
【解决方案1】:
阿德里安,
答案就在您的问题中。移动服务是一个抽象层;这就是为什么您不能直接访问这些表的原因。来自电话的请求到达移动服务,它允许您运行逻辑,然后转身并代表您访问数据库。出于多种原因,包括连接池和安全性,这是最好的方法。有关这些操作如何工作的详细信息,请查看 MSDN 文档中关于使此工作有效的 Mobile Service REST 协议。
谢谢
赫夫
【解决方案2】:
Here's blog post 解释从 Windows Azure 移动服务自定义 API 公开现有 SQL 数据库的过程
您可以直接从 javascript 端进行 SQL 查询。
exports.get = function(request, response) {
var id = request.query.id;
request.service.mssql.query(
'select * from Person join Orders on Person.ID = Orders.PersonID where Person.id = ' + id, {
success: function(results) {
response.send(200, results);
}
});
};
有关mssql 对象的更多文档。
【解决方案3】:
正如Herve Roggero 已经指出的那样,Mobile Services RESTful API 是在 SQL Azure 中访问表的建议方法。移动服务的整个理念就是从您的应用程序中承担数据访问和修改的负担,并将其置于云托管服务的肩上。
如果您仍然想“直接”访问数据表,有以下几种方式:
在您的服务器脚本中,您可以使用全局 mssql 对您的数据库运行 SQL 查询、检索数据、修改或插入
他们。
mssql.query('select top 1 * from statusupdates',
{ success: function(results)
{
console.log(results);
}
}
);
如果您有其他云托管服务(网络或辅助角色)并且您为内部请求激活了防火墙访问权限,您可以使用 TDS 协议访问 SQL Azure 服务器并根据对你的好恶。
最后,您可以在 SQL Azure 上打开防火墙,以便从外部网络连接到它,然后再次在客户端上使用 TDS 协议进行 DB 通信。
但是这三种方法我都不会称之为“通过移动服务”,而是“从内部”(1)和“绕过它们”(2,3)。