首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure Mobile Services发生未处理异常。错误:您的脚本之一导致服务失去响应。

Azure Mobile Services发生未处理异常。错误:您的脚本之一导致服务失去响应。
EN

Stack Overflow用户
提问于 2016-03-28 20:25:52
回答 2查看 281关注 0票数 0

为我的英语道歉。

我有一个节点js脚本,它必须使用IoT集线器向设备发送AMQP消息。我从天蓝色网站的github上拿了这个剧本。这是样品。

这是这个样品

这是我的脚本,基于这个:

代码语言:javascript
复制
    console.log("creating the client");

var Client = require('azure-iothub').Client;
console.log("client has been created");

var Message = require('azure-iot-common').Message;
console.log("message has been created");


var connectionString = "HostName=id**.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=***;
console.log(connectionString);
var targetDevice = 'devicesergey';

var client = Client.fromConnectionString(connectionString);

client.open(function (err) {
    if (err) {
        console.error('Could not connect: ' + err.message);
    } 
    else {
        console.log('Client connected');

        var data = JSON.stringify({ text : 'foo' });
        var message = new Message(data);
        console.log("json message is created")
        console.log('Sending message: ' + message.getData());
        client.send(targetDevice, message, printResultFor('send'));
        console.log("message has been sent");             
    }
});

function printResultFor(op) {
  return function printResult(err, res) {
    if (err) {
      console.log(op + ' error: ' + err.toString());
    } else {
      console.log(op + ' status: ' + res.constructor.name);
    }
  };
} 

这在本地运行良好,我在设备模拟器上看到消息。但是,当我尝试将其放入Azure Mobile Services API并尝试运行它时,我会在日志中看到以下消息:

发生了未处理的异常。错误:您的一个脚本导致服务失去响应,服务被重新启动。这通常是由执行无限循环或长时间阻塞操作的脚本造成的。在脚本连续执行超过5000毫秒后,服务被重新启动。在process.Server._registerUncaughtExceptionListenerAndCreateHttpServer._onUncaughtException (D:\home\site\wwwroot\node_modules\azure-mobile-services\runtime\server.js:218:17) at process.EventEmitter.emit (events.js:126:20)

有时我看到这个IIS错误,我知道这一行发生在这个函数:client.open(函数.我尝试过只保留client.open(),并发送一个从这个函数中删除的消息。但在这种情况下,我看到“客户端没有连接”。

我在github上问过这些东西。他们建议我到这里来问。也许有人知道如何解决这个问题(使用脚本或Azure)。我会很棒的!

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-03-29 07:57:05

是一个公开express.js库功能的脚本,请参阅官方文档“使用JavaScript后端移动服务工作”中的Overview of custom APIs部分

我成功地复制了这个问题。我想您的脚本没有作为body块包装在下面的代码中,也没有像浏览器一样将响应发送给客户端。

代码语言:javascript
复制
exports.get = function(request, response) {
    // The body block
    ....
    response.send(200, "<response-body>");
}

有关移动服务自定义API的更多细节,请参见https://msdn.microsoft.com/library/azure/dn280974.aspx

更新

我修改了你的代码如下。

为了方便测试,我更改了api的权限如下,然后我可以使用浏览器访问api链接https://<mobile-service-name>.azure-mobile.net/api/test

票数 0
EN

Stack Overflow用户

发布于 2016-03-30 10:37:00

我刚刚尝试在新的Azure MS上执行我的脚本,结果失败了。我会一步一步地写我的动作,也许你会发现任何错误,因为我不太擅长NodeJS。

  1. 用新的SQL数据库添加一个新的Azure MS
  2. 添加一个新的API "dev“。进入-所有点的每个人。以下是源代码: var exports.get =console.log(请求,响应){console.log(“创建客户端”);var Client = require('azure-iothub').Client;console.log(“客户端已经创建”);var Message =require(‘azure-物联网-公共’).Message;console.log(“消息已创建”);var connectionString =console.log console.log(connectionString);var targetDevice = 'devicesergey';var client.open=client.open(函数(err) { if (err) {console.error(‘未能连接:’+ err.message);}{ console.log('Client connected');var data = JSON.stringify({ text:'foo‘});var =新消息(数据);Console.log(“已创建json消息”)console.log(发送消息:‘+message.getData();client.send(targetDevice,message,printResultFor('send'));console.log(“消息已发送”);});};响应(200,"Hello,world!");};函数printResultFor(op) {返回函数printResult(err,res) { if (err) { console.log(op +‘error:’+ err.toString());}console.log{ console.log(op +‘状态:’+ res.constructor.name);} };

如果我试图执行这个东西,它就会出现“无蓝-碘”和“无青-碘-普通”,所以我需要使用git来添加这些npm。

  1. 我使用git访问Azure MS https://id.scm.azure-mobile.net/id.git将这个存储库克隆到本地dir
  2. 输入"API“文件夹并添加NPM:

  1. 然后我选择了"Rescan“、”“、"Commit”、"Push“
  2. 在这些操作之后,我通过路径"http://id**.mobile-services.net/api/dev“执行我的脚本,没有看到任何可能看到的错误"500.1013”,以及日志上的这些消息(id取决于):

发生了未处理的异常。错误:您的一个脚本导致服务失去响应,服务被重新启动。这通常是由执行无限循环或长时间阻塞操作的脚本造成的。在脚本连续执行超过5000毫秒后,服务被重新启动。process.Server._registerUncaughtExceptionListenerAndCreateHttpServer._onUncaughtException (D:\home\site\wwwroot\node_modules\azure-mobile-services\runtime\server.js:218:17) at process.EventEmitter.emit (events.js:126:20)

我不知道我做错了什么

更新:我尝试使用Kudu控制台安装npms,它会返回许多错误。如果我计算正确,我需要更新我的节点js和npm。但我不知道该怎么做,我也没能找到解决办法。以下是日志:

我没有声誉,所以我不允许过去的日志脚本。

我试过做这些事,但没有用:

在回购程序的根目录下,您将找到一个.deployment文件,该文件具有: 命令= ..\ZumoDeploy.cmd将其更改为 命令= deploy.cmd并在其旁边创建一个包含以下内容的deploy.cmd: 设置NPM_JS_PATH=%ProgramFiles(x86)%\npm\1.4.9\node_modules\npm\bin\npm-cli.js ..\ZumoDeploy.cmd,提交文件和推送。

我很困惑。这怎么可能呢?Azure移动服务不允许安装azure-iot)。我该如何处理这个问题呢?

UPDATE2: Peter,您建议我使用Kudu DebucConsole安装必要的npm。但当我试着去做的时候-我看到了错误。

我向github上的" npm“命令传递了这个问题,他们说Azure所使用的npm版本完全不受支持。高温超导ps://github.com/npm/npm/issues/12210#event-615573997

UPDATE3 (04/12/2016)我用不同的方式解决了这个问题。创建了自己的节点JS脚本,用于侦听端口、读取GET params(deviceId和message)并发送D2C消息。不幸的是,我仍然无法解决Azure的问题。

UPDATE4彼得潘给了我一个如何使用另一个版本的nodejs和npm的建议。现在我成功地安装了必要的NPM模块。但是现在Azure Mobile脚本API不起作用了,它向我展示了我试图在浏览器中获得的任何脚本上的{“代码”:404、“错误”:“错误:未找到”}。

也许我在尝试做这些事情的时候删除了一些东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36270576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档