2017-09-04 1 views
2

J'essaie les applications Azure Function.Comment faire pour résoudre le comportement de l'application de fonction Flaky Azure?

La première suite à l'exemple d'un tutoriel avec Open Weather Map, a cessé de fonctionner après avoir utilisé log.WriteLine(), qui a correctement jeté une erreur de compilation. J'ai changé à log.Info() et il a continué à se plaindre environ TraceWriter ne contenant pas une définition pour WriteLine.

Après une longue session de dépannage, j'ai créé une nouvelle fonction, en copiant tout le contenu de la cassée, et cela a fonctionné immédiatement.

créé une nouvelle fonction, comme avant, et a commencé à apporter des modifications à la méthode Run(), et l'exécution de ce rendement de la fonction:

« La ressource que vous recherchez a été supprimée, son nom changé, ou est temporairement indisponible. "

Ayant à l'esprit, l'URL de fonction est basée sur la clé par défaut Azure génère lorsque la fonction est créée: https: //.azurewebsites.net/api/WeatherWhereYouAre code = my1really2RAndom3defauLT4Key5from6Azure ==

Créé? encore une autre fonction, sans modification de la valeur par défaut « Bonjour Azure » échantillon, et il donne une erreur 500 avec:

« Exception en exécution de la fonction:. Functions.HttpTriggerCSharp2 -> une ou plusieurs erreurs se sont produites -> Paramètre de liaison d'exception 'req' -> La chaîne d'entrée n'était pas dans un format correct. "

Ceci est le contenu du fichier project.json:

{ 
    "frameworks": { 
     "net46": { 
      "dependencies": { 
       "Microsoft.IdentityModel.Clients.ActiveDirectory": "3.16.0", 
       "Microsoft.Azure.KeyVault": "2.3.2", 
       "Microsoft.AspNet.WebApi.Client": "5.2.3" 
      } 
     } 
    } 
} 

Et le run.csx:

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; 

    // 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 " + name); 
} 

EDIT

Completely inconsistent behaviour Dans l'image ci-dessus , notez que ceci est httpTriggerFSharp1, mais l'exception est Ht tpTriggerCSharp2 (qui est le seul qui fonctionne!)

Y at-il un moyen que je peux correctement résoudre ces problèmes?

+0

Parfois, vous devez redémarrer manuellement les applications de fonction après le déploiement, pour qu'il recharge correctement les nouveaux binaires. C'est vraiment énervant, et on dirait que vous expérimentez la même chose. –

Répondre

1

Pour le modèle de HttpTrigger par défaut pour C#, vous pouvez l'appeler comme suit:

Get https://brucefunapp.azurewebsites.net/api/HttpTriggerCSharp3?name=bruce&code=ItDhLMxwDYmTvMTYzVbbALtL5GEcmaL5DlzSaD4FRIuFdh17ZkY71g== 

Or 

Post https://brucefunapp.azurewebsites.net/api/HttpTriggerCSharp3?code=ItDhLMxwDYmTvMTYzVbbALtL5GEcmaL5DlzSaD4FRIuFdh17ZkY71g== 
Content-type: application/json 
{"name": "bruce"} 

Pour plus de détails sur les fonctions Azure script C#, vous pouvez consulter à here.

Y a-t-il un moyen de résoudre ces problèmes correctement?

par ma compréhension, vous pourriez tirer parti Precompiled functions et utiliser Visual Studio 2017 Tools for Azure Functions pour la création, le débogage local, et la publication d'Azure.

+0

Je sais comment appeler les fonctions. C'est juste que certains travaillent, d'autres ne compileront pas, même avec le même code. Créez une nouvelle fonction, cliquez sur Exécuter, et certains réussissent, mêmes étapes, et certains échouent. Ils sont simplement floconneux ... – reckface

+0

Je n'ai pas rencontré ce comportement pour l'instant. J'ai supposé que vous pourriez utiliser des fonctions précompilées et développer votre application de fonction sur votre côté local, alors vous pourriez déployer à l'azur après un test local. En outre, vous pouvez ajouter vos commentaires et signaler ce comportement [ici] (https://feedback.azure.com/forums/355860-azure-functions). –