在Azure Function上使用web3.js调用以太坊



我正试图使用Azure Function使用Web3.js调用以太坊,代码在命令shell中似乎运行良好,但当我将其作为函数运行时,遇到了一个错误。

在Azure门户网站上创建一个新的Javascript Azure功能:

  1. 转到平台功能-->开发工具-->高级工具(kudu)-->调试控制台-->CMD

    cd站点cd wwwrootcdnpm安装web3@^0.20.0

  2. 创建一个新的code.js文件

    const Web3=require('Web3');var web3=新建web3();const httpProv=新Web3.providers.HttpProvider("http://:8545");web3.setProvider(httpProv);console.log(web3.eth.blockNumber);

  3. 在CMD shell 中执行此文件

    节点代码.js

  4. 工作正常,我可以看到HTTP Post请求

    请求:

    POST/HTTP/1.1用户代理:节点XMLHttpRequest接受:/内容类型:application/json主机::内容长度:63连接:关闭

    {"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}

响应:

HTTP/1.1 200 OK
Content-Type: application/json
Vary: Origin
Date:
Content-Length:
Connection:close
{"jsonrpc":"2.0", "id":1,"result":"bla"}

我在wwwroot目录中创建了一个package.json文件

{
"frameworks": {
"net46":{
"dependencies": {
"web3": "^0.20.0"        
}
}
}
}

并运行

npm install

当我执行Azure功能时,我会收到以下错误:

2017-10-30T08:31:44.291 Function started (Id=f28edf73-fa02-406d-868e-0f23cd41e6e0)
2017-10-30T08:31:44.338 Exception while executing function: Functions.AZURE_FUNCTION. mscorlib: Error: CONNECTION ERROR: Couldn't connect to node http://IP_ADDR:8545.
at Object.InvalidConnection (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3errors.js:31:16)
at HttpProvider.send (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3httpprovider.js:84:18)
at RequestManager.send (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3requestmanager.js:58:32)
at Eth.get [as blockNumber] (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3property.js:107:62)
at module.exports (D:homesitewwwrootAZURE_FUNCTIONindex.js:8:25)
at D:Program Files (x86)SiteExtensionsFunctions1.0.11296binazurefunctionsfunctions.js:99:24.
2017-10-30T08:31:44.385 Function completed (Failure, Id=f28edf73-fa02-406d-868e-0f23cd41e6e0, Duration=94ms)
2017-10-30T08:31:44.385 Exception while executing function: Functions.AZURE_FUNCTION
2017-10-30T08:31:44.385 Error: CONNECTION ERROR: Couldn't connect to node http://IP_ADDR:8545.
at Object.InvalidConnection (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3errors.js:31:16)
at HttpProvider.send (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3httpprovider.js:84:18)
at RequestManager.send (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3requestmanager.js:58:32)
at Eth.get [as blockNumber] (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3property.js:107:62)
at module.exports (D:homesitewwwrootAZURE_FUNCTIONindex.js:8:25)
at D:Program Files (x86)SiteExtensionsFunctions1.0.11296binazurefunctionsfunctions.js:99:24
2017-10-30T08:31:44.385 Function completed (Failure, Id=f28edf73-fa02-406d-868e-0f23cd41e6e0, Duration=94ms)
2017-10-30T08:31:44.385 Executed 'Functions.AZURE_FUNCTION' (Failed, Id=f28edf73-fa02-406d-868e-0f23cd41e6e0)
2017-10-30T08:31:44.385 Error: CONNECTION ERROR: Couldn't connect to node http://IP_ADDR:8545.
at Object.InvalidConnection (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3errors.js:31:16)
at HttpProvider.send (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3httpprovider.js:84:18)
at RequestManager.send (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3requestmanager.js:58:32)
at Eth.get [as blockNumber] (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3property.js:107:62)
at module.exports (D:homesitewwwrootAZURE_FUNCTIONindex.js:8:25)
at D:Program Files (x86)SiteExtensionsFunctions1.0.11296binazurefunctionsfunctions.js:99:24
2017-10-30T08:31:44.385 Function had errors. See Azure WebJobs SDK dashboard for details. Instance ID is 'f28edf73-fa02-406d-868e-0f23cd41e6e0'
2017-10-30T08:31:44.385 Error: CONNECTION ERROR: Couldn't connect to node http://IP_ADDR:8545.
at Object.InvalidConnection (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3errors.js:31:16)
at HttpProvider.send (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3httpprovider.js:84:18)
at RequestManager.send (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3requestmanager.js:58:32)
at Eth.get [as blockNumber] (D:homesitewwwrootAZURE_FUNCTIONnode_modulesweb3libweb3property.js:107:62)
at module.exports (D:homesitewwwrootAZURE_FUNCTIONindex.js:8:25)
at D:Program Files (x86)SiteExtensionsFunctions1.0.11296binazurefunctionsfunctions.js:99:24
2017-10-30T08:31:44.400 {"id":"4e755d0e-a2cf-4c4a-a734-aa750555a948","requestId":"4fa42aca-ff49-487a-a543-8f82295a1e5c","statusCode":500,"errorCode":0,"message":"Exception while executing function: Functions.AZURE_FUNCTION -> Error: CONNECTION ERROR: Couldn't connect to node http://IP_ADDR:8545.n    at Object.InvalidConnection (D:\home\site\wwwroot\AZURE_FUNCTION\node_modules\web3\lib\web3\errors.js:31:16)n    at HttpProvider.send (D:\home\site\wwwroot\AZURE_FUNCTION\node_modules\web3\lib\web3\httpprovider.js:84:18)n    at RequestManager.send (D:\home\site\wwwroot\AZURE_FUNCTION\node_modules\web3\lib\web3\requestmanager.js:58:32)n    at Eth.get [as blockNumber] (D:\home\site\wwwroot\FUNCTION_NAME\node_modules\web3\lib\web3\property.js:107:62)n    at module.exports (D:\home\site\wwwroot\FUNCTION_NAME\index.js:8:25)n    at D:\Program Files (x86)\SiteExtensions\Functions\1.0.11296\bin\azurefunctions\functions.js:99:24"}
2017-10-30T08:31:44.400 Error: CONNECTION ERROR: Couldn't connect to node http://IP_ADDR:8545.
at Object.InvalidConnection (D:homesitewwwrootFUNCTION_NAMEnode_modulesweb3libweb3errors.js:31:16)
at HttpProvider.send (D:homesitewwwrootFUNCTION_NAMEnode_modulesweb3libweb3httpprovider.js:84:18)
at RequestManager.send (D:homesitewwwrootFUNCTION_NAMEnode_modulesweb3libweb3requestmanager.js:58:32)
at Eth.get [as blockNumber] (D:homesitewwwrootFUNCTION_NAMEnode_modulesweb3libweb3property.js:107:62)
at module.exports (D:homesitewwwrootFUNCTION_NAMEindex.js:8:25)
at D:Program Files (x86)SiteExtensionsFunctions1.0.11296binazurefunctionsfunctions.js:99:24
2017-10-30T08:31:44  PID[10332] Information Sending response: 200.0 OK
2017-10-30T08:31:44  PID[10332] Information Sending response: 200.0 OK

以下是我解决此问题的步骤。

  1. 在应用服务计划(而不是消费计划)上创建Azure功能应用程序
  2. 启用websocket
  3. 将运行时版本切换到Beta

请注意,Websock和Runtime版本选项仅在应用程序服务计划中可用。

最新更新