为我的英语道歉。
我有一个节点js脚本,它必须使用IoT集线器向设备发送AMQP消息。我从天蓝色网站的github上拿了这个剧本。这是样品。
这是我的脚本,基于这个:
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)。我会很棒的!
谢谢!
发布于 2016-03-29 07:57:05
是一个公开express.js库功能的脚本,请参阅官方文档“使用JavaScript后端移动服务工作”中的Overview of custom APIs部分
我成功地复制了这个问题。我想您的脚本没有作为body块包装在下面的代码中,也没有像浏览器一样将响应发送给客户端。
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。

发布于 2016-03-30 10:37:00
我刚刚尝试在新的Azure MS上执行我的脚本,结果失败了。我会一步一步地写我的动作,也许你会发现任何错误,因为我不太擅长NodeJS。
如果我试图执行这个东西,它就会出现“无蓝-碘”和“无青-碘-普通”,所以我需要使用git来添加这些npm。

发生了未处理的异常。错误:您的一个脚本导致服务失去响应,服务被重新启动。这通常是由执行无限循环或长时间阻塞操作的脚本造成的。在脚本连续执行超过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、“错误”:“错误:未找到”}。
也许我在尝试做这些事情的时候删除了一些东西。
https://stackoverflow.com/questions/36270576
复制相似问题