2017-09-26 3 views
0

Je tente de convertir une application Azure Function en une version précompilée à l'aide de 'Publication d'une bibliothèque de classes .NET en tant qu'application de fonction' blog post de Donna Malayeri.La fonction Azure précompilée La liaison StorageTableInput ne fonctionne pas

Le déclencheur de minuteur que j'utilise possède une liaison d'entrée StorageTable utilisant un objet typé. L'objet hérite de 'TableEntity'. Alors que la version du portail n'a pas de problèmes, ma version précompilé jette l'erreur suivante:

Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.ScheduleTrigger'. Microsoft.Azure.WebJobs.Host: GenericArguments[0], 'MyScheduler.Schedule', on 'Microsoft.Azure.WebJobs.Host.Tables.TableExtension+TableToIQueryableConverter`1[TElement]' violates the constraint of type 'TElement'. mscorlib: GenericArguments[0], 'MyScheduler.Schedule', on 'Microsoft.Azure.WebJobs.Host.Tables.TableExtension+TableToIQueryableConverter`1[TElement]' violates the constraint of type parameter 'TElement'. 

Le Azure code de fonction ressemble à ceci:

using System; 
using System.Linq; 
using Microsoft.Azure.WebJobs; 
using Microsoft.Azure.WebJobs.Host; 
using Microsoft.WindowsAzure.Storage.Table; 

namespace MyScheduler 
{ 
    public class ScheduleTrigger 
    { 

     public static void Run(TimerInfo scheduleTimer, Queryable<Schedule> schedulesTable, ICollector<Schedule> scheduleQueueItem, TraceWriter log) 
     { 
      log.Info($"Start processing at: {DateTime.Now}."); 

      // processing code here... 

      log.Info($"Finished processing at: {DateTime.Now}."); 
     } 
    } 

    public class Schedule : TableEntity 
    { 
     public string Name { get; set; } 
     public DateTime LastRunAt { get; set; } 
     public bool Active { get; set; } 
     public string Endpoint { get; set; } 
    } 
} 

Le 'function.json' fichier ressemble à ceci:

{ 
    "scriptFile": "..\\bin\\MyScheduler.dll", 
    "entryPoint": "MyScheduler.ScheduleTrigger.Run", 
    "bindings": [ 
    { 
     "name": "scheduleTimer", 
     "type": "timerTrigger", 
     "direction": "in", 
     "schedule": "0 * * * * *" 
    }, 
    { 
     "type": "table", 
     "name": "schedulesTable", 
     "tableName": "schedules", 
     "partitionKey": "Schedules", 
     "connection": "AzureWebJobsStorage", 
     "direction": "in" 
    }, 
    { 
     "type": "queue", 
     "name": "scheduleQueueItem", 
     "queueName": "schedulesqueue", 
     "connection": "AzureWebJobsStorage", 
     "direction": "out" 
    } 
    ], 
    "disabled": true 
} 
+0

Quelle version du SDK de stockage faites-vous référence? –

Répondre

1

quelques choses:

  1. Assurez-vous de référence SDK Azure Storage ou moins 7.2.1 (idéalement, 7.2.1)
  2. Le dernier modèle pour les fonctions pré-compilé, avec plein outillage/intégration à Visual Studio, est documentée here. S'il vous plaît envisager de passer à cela.
+0

J'ai vu votre autre réponse pour https://stackoverflow.com/questions/42284705/precompiled-azure-function-and-cloudtable-binding-output-doesnt-work mais puisque ce n'était pas exactement le même problème que je n'ai pas en fait essayer ça. –

+0

Aussi ... que les réponses datent d'il y a plus d'un an ... vous vous attendez à ce que quelque chose comme ça soit résolu maintenant –

+0

Content que cela vous ait aidé. Passer à une nouvelle version n'est pas quelque chose qui sera fait dans une version mineure, donc cela ne changera pas dans 1.x. L'aperçu 2.0 utilise la dernière version et nous avons l'intention d'exposer un mécanisme pour adoucir cette limitation. –