2017-09-02 1 views
0

J'ai créé la fonction azur simple (Http + C#) qui retourne le test simple. Je veux retourner la réponse des fonctions azur aux services mobiles azur. Avant j'ai invoqué la procédure stockée de mes services mobiles. Maintenant j'essaye d'invoquer cet azure La fonction (noeud Js) veut récupérer la réponse des fonctions azur. Azure Code de service mobile et mon simple script de fonction bleu azurComment appeler HTTP (Azure Functions) à partir des services de l'application Azure Mobile?


 

 
module.exports = { 
 
    "post": function (req, res, next) {  
 
      console.log("Started Application Running"); 
 
     var http = require("http");  
 
     var options = { 
 
      host: "<appname>.azurewebsites.net",   
 
      path: "api/<functionname>?code=<APIkey>", 
 
      method: "POST", 
 
      headers : { 
 
       "Content-Type":"application/json", 
 
       "Content-Length": { name : "Testing application"} 
 
      }  
 
     }; 
 
     http.request(options, function(response) { 
 
      var str = ""; 
 
      response.on("data", function (chunk) { 
 
      str += chunk; 
 
      res.json(response); 
 
      console.log("Something Happens"); 
 
      }); 
 
      response.on("end", function() { 
 
      console.log(str);    
 
      res.json(response); 
 
     });   
 
     }); 
 
     console.log("*** Sending name and address in body ***");   
 
    } 
 
};

Voici ma fonction d'azur

using System.Net; 
 

 
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) 
 
{ 
 
    log.Info("C# HTTP trigger function processed a request."); 
 

 
    // parse query parameter 
 
    //string name = req.GetQueryNameValuePairs() 
 
     // .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0) 
 
     //.Value; 
 
    string name = "divya"; 
 
    // Get request body 
 
    dynamic data = await req.Content.ReadAsAsync<object>(); 
 

 
    // Set name to query string or body data 
 
    name = name ?? data?.name; 
 

 
    return name == null 
 
     ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body") 
 
     : req.CreateResponse(HttpStatusCode.OK, "Hello Welcome "); 
 
}

.Peut quelqu'un me aider?

+0

Quel est le problème exact que vous avez actuellement? – Mikhail

+0

Je reçois erreur interne du serveur lorsque je cours service mobile.J'ai essayé de résoudre je ne sais pas la solution exacte. – divya

Répondre

0

Vous devez envoyer votre corps de requête en utilisant req.write(data), mais pas Content-Length. Voir this answer pour un exemple de la façon de procéder.

Et votre code devrait ressembler à ceci:

module.exports = { 
    "post": function (req, res, next) {  

    var http = require("http"); 

    var post_data = JSON.stringify({ "name" : "Testing application"}); 

    var options = { 
     host: "<appname>.azurewebsites.net",   
     path: "/api/<functionname>?code=<APIkey>", // don't forget to add '/' before path string 
     method: "POST", 
     headers : { 
     "Content-Type":"application/json", 
     "Content-Length": Buffer.byteLength(post_data) 
     }  
    }; 

    var requset = http.request(options, function(response) { 
     var str = ""; 
     response.on("data", function (chunk) { 
     str += chunk; 
     }); 

     response.on("end", function() { 
     res.json(str);   
     });   
    }); 

    requset.write(post_data); 
    requset.end(); 
    requset.on('error', function(e) { 
     console.error(e); 
    }); 

    } 
}; 
+0

J'ai essayé mais je n'ai pas obtenu de valeur de mon API de service mobile. Erreur de connexion inattendue. – divya

+0

Bonjour, J'ai mis à jour ma réponse avec mon code de travail. –