Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript azure自定义API:执行数据库事务返回超时_Javascript_Azure_Transactions - Fatal编程技术网

Javascript azure自定义API:执行数据库事务返回超时

Javascript azure自定义API:执行数据库事务返回超时,javascript,azure,transactions,Javascript,Azure,Transactions,在azure自定义api上,我试图使用数据库转换对三个表执行大容量插入操作。然后在控制台上遇到此错误 请求“POST/api/saveinvite”已超时。这可能是由于脚本无法写入响应,或者无法及时从异步调用返回 可能是30秒后的事务超时? 尝试将insert重写为多个较小的事务看起来您并没有试图做太多。插入几百行应该在超时之前返回。 如果移动服务用户在数据库表上存在权限问题,您将获得超时,并且您的事务和自定义错误处理可能会隐藏该问题。确保你已经运行了一个 GRANT SELECT, INSE

在azure自定义api上,我试图使用数据库转换对三个表执行大容量插入操作。然后在控制台上遇到此错误

请求“POST/api/saveinvite”已超时。这可能是由于脚本无法写入响应,或者无法及时从异步调用返回


可能是30秒后的事务超时?


尝试将insert重写为多个较小的事务

看起来您并没有试图做太多。插入几百行应该在超时之前返回。 如果移动服务用户在数据库表上存在权限问题,您将获得超时,并且您的事务和自定义错误处理可能会隐藏该问题。确保你已经运行了一个

GRANT SELECT, INSERT, UPDATE ON OBJECT::[dbo].[Invitee_FriendCircle] TO [Created_MobileServicesLogin_User] 
--For whatever name was created when you made the app (not the name you entered when you created the app, but the wacky one that mobile services made)
有些事情可以尝试: 确保为要插入的表编制了所执行插入类型的索引。如果它是一个大表,并且索引是一个问题,那么让移动api插入一个小临时表,然后使用sp_start_job运行一个异步作业,以使用临时表更新主表。这样,您就不会在表执行更新时等待

在包含INSERT的数据库中编写存储过程,并将变量传递给它们,而不是在此处编写INSERT查询。在存储过程中,如果确实要传递很多值并且需要快速执行,则还可以执行大容量插入

修改数据库连接字符串中的ConnectionTimeout属性。 您可以修改request.service.config.sqlConnectionString

试着把它拆开,找出问题所在。删除事务,并尝试在不使用事务和自定义错误处理程序的情况下,一次只在一个表上执行它。试一试

exports.post = function(request, response) {
var jsonfriendcircle=request.body.jsonfriendcircle;
var jsoninviteelist=request.body.jsoninviteelist;
var jsoninviteefriendcirclelist=request.body.jsoninviteefriendcirclelist;
var mssql=request.service.mssql; 

var sqlst1='insert into FriendCircle (id,circle_name)values(?,?)' ;
mssql.query(sqlst1,[jsonfriendcircle.id,jsonfriendcircle.circle_name], {
        success: function(results) {
             response.send(statusCodes.OK, { message : 'success' });
        },
        error: function(err) {
           console.log("error is: " + err);
        }
    });   
};
一次尝试一个,以查看是否有任何失败,如果失败,请检查Azure门户上的日志,以查看是否存在权限问题


祝你好运

代码太长,无法阅读,但让我尝试一些猜测。您是否尝试过使用此批量插入保存一些虚拟数据?@XiaominWu是的,我想使用mssql.open()执行批量插入事务,因此如果它在批量保存小主干数据时起作用,我猜您保存的真实数据太大,导致超时?尝试寻找任何可能增加超时窗口的设置?@KumaranathFernando您是否尝试在最后关闭连接?检查完所有连接后,我发现您的代码有一些问题:1。每次执行sql时都会响应请求。2.您在每次插入时提交(如何在单个事务中提交?)。您一次触发所有查询,因此您可能正在使用所有可用的sql连接建议:1。使用承诺并等待所有承诺的执行2。使用orm,避免手工编写sql。(如果没有可用的orm,那么您只需要从要插入的所有数据组成一个sql查询)3。只回复一次4。将您的代码分解为更小的、自描述性的函数。此帐户将提供一些有用的信息!!谢谢!!我是azure移动服务的新手,可以告诉我在哪里执行授权查询吗?它是否在另一个自定义api上?您必须在数据库端执行它。使用SMS并使用管理员帐户登录数据库。查找移动服务在ServerName/Security/Logins下创建的登录名。在DatabaseName/Security/Users下找不到它。它会很长,有一堆随机字符。然后在服务器上的特定数据库上运行GRANT命令。我用一次插入更新了我的代码,没有数据库传输,但仍然得到了超时!原因可能是什么?从旧的Azure门户(manage.windowsazure.com),单击移动服务图标,单击移动服务的名称,然后单击顶部的“日志”一词。如果数据库抛出错误,它实际上不会像超时一样作为红色“错误”记录在这里,而是作为“信息性”通知记录在这里。但“消息”栏文本中的第一个词通常是“错误:…”。您的日志中显示了什么?这通常不仅仅是超时。在azure门户上移动服务的“配置”页面上,列出的数据库和服务器是否仍然良好?
exports.post = function(request, response) {
var jsonfriendcircle=request.body.jsonfriendcircle;
var jsoninviteelist=request.body.jsoninviteelist;
var jsoninviteefriendcirclelist=request.body.jsoninviteefriendcirclelist;
var mssql=request.service.mssql; 

var sqlst1='insert into FriendCircle (id,circle_name)values(?,?)' ;
mssql.query(sqlst1,[jsonfriendcircle.id,jsonfriendcircle.circle_name], {
        success: function(results) {
             response.send(statusCodes.OK, { message : 'success' });
        },
        error: function(err) {
           console.log("error is: " + err);
        }
    });   
};