0

您好亲爱的 PBI REST API 专家,我将感谢您对以下问题的任何支持。尝试通过 Rest API 将数据从 MongoDB Atlas 发送到 Power BI Push Dataset。但是我遇到了以下问题,当我向 PBI Rest API 发出超过 5 个 post http 请求时,它说'Error: connect: exceeded the limit of 5 sockets'. 我在这个网站上找到了以下链接,但似乎在那里找不到解决方案:Close socket connection in request.js

function postDataToPowerBi(result) {
...    
              collection.findOne({"_id": item._id}).then(itemDoc => {
                postOne(itemDoc, access_token);
              });
...
  }

  function postOne(itemDoc, access_token){

      var postData = JSON.stringify({
          "rows": [
            {
              "Name": itemDoc.Name,
              "name.1": itemDoc.name
            }
          ]
      });
      
      // request option
      var options = {
        host: 'api.powerbi.com' ,
        port: 443,
        method: 'POST',
        path: '/v1.0/myorg/groups/' + group_id + '/datasets/' + dataset_id + '/tables/' + table_name + '/rows',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + access_token,
          // 'Content-Length': postData.length,
          'Connection': 'Close'
        }
      };
      // request object
      var req = https.request(options, function (res) {
        var result = '';
        res.on('data', function (chunk) {
          result += chunk;
        });
        res.on('end', function () {
          console.log(res.statusCode);

        });
        res.on('error', function (err) {
          console.log(err);
        });
      });
      
      // req error
      req.on('error', function (err) {
        console.log(err);
      });
      
      req.on('close', function () {
        console.log("request closed");
      });
      
      //send request witht the postData form
      req.write(postData);
      req.end();
  }
4

1 回答 1

0

找到发布的问题的解释。Power BI 对推送数据集的每个数据集最多有 5 个挂起的 POST 行请求。此处提供更多信息:https://docs.microsoft.com/en-us/power-bi/developer/embedded/push-datasets-limitations因此,唯一且更好的方法是批量发布行而不是逐行发布。下面的例子:

function postBulk(docs, access_token, firstRun){
      
      if(firstRun){
        deleteRows(access_token);
      }
      
      var postData = '{"rows": ' + JSON.stringify(docs) + '}';
      
      // console.log(postData);
      
      // request option
      var options = {
        host: 'api.powerbi.com' ,
        port: 443,
        method: 'POST',
        path: '/v1.0/myorg/groups/' + group_id + '/datasets/' + dataset_id + '/tables/' + table_name + '/rows',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + access_token,
          // 'Content-Length': postData.length,
          // 'Connection': 'Close'
        }
      };
      // request object
      var req = https.request(options, function (res) {
        var result = '';
        res.on('data', function (chunk) {
          result += chunk;
        });
        res.on('end', function () {
          console.log("postBulk: " + res.statusMessage);

        });
        res.on('error', function (err) {
          console.log("postBulk: " + err);
        });
      });
      
      // req error
      req.on('error', function (err) {
        console.log("postBulk: " + err);
      });
      
      // req.on('close', function () {
      //   console.log("request closed");
      // });
      
      //send request witht the postData form
      req.write(postData);
      req.end();
  }
于 2022-02-12T22:10:54.310 回答