2017-02-16 1 views
4

ich eine vorkompilierte Azure Funktion bin mit, das aussieht:Precompiled Azure Funktion und CloudTable Bindung Ausgang funktioniert nicht

public static async Task Run(Stream inputBlob, Stream outputJson, Stream outputXml, CloudTable schedulerTable) 

Der Ausgang Bindung Aussehen:

{ 
    "name": "schedulerTable", 
    "type": "table", 
    "direction": "out", 
    "tableName": "SchedulerTable", 
    "connection": "SchedulerTable" 
} 

Wenn ich den Parameter schedulerTable entfernen Von meiner Funktion her funktioniert es. 'Die Nachricht, dass der Host in meinem Gesicht wirft, ist:

Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.InputFileAdaptorAF'. Microsoft.Azure.WebJobs.Host: Can't bind Table to type 'Microsoft.WindowsAzure.Storage.Table.CloudTable'. 

Wirklich, wenn ich eine Tabelle Ausgang Bindung versucht, mit diferent Alternativen hinzufügen, funktioniert nichts. Alternativen, die nicht funktionieren sind:

  • Parameter SchedulerTable mit Typ SchedulerRegister. Die Klasse SchedulerRegister erbt von TableEntity.
  • Parameter SchedulerTable mit Typ ICollector.
  • Parameter SchedulerTable mit Typ CloudTable. (der Fall oben).

Bitte, ¿Wie kann ich es beheben? (Verwenden Sie eine Ausgabe, die an eine azurblaue Tabelle bindet)

Antwort

8

Sie stoßen wahrscheinlich auf Typenkonfliktprobleme. Welche Version des Storage SDK verwenden Sie? Sie müssen sicherstellen, dass Speicher-SDK-Verweise mit dem übereinstimmen, was die Laufzeit erwartet, was derzeit 7.2.1 ist.

Stellen Sie sicher, dass Sie auf das Storage SDK Version 7.2.1 verweisen.

+0

Das war es! Danke –

+0

Ich habe nicht für mich gearbeitet. Ich habe Project Storage SDK in Version 7.2.1 geändert und verifiziert, dass AppData \ Local \ Azure.Functions.Cli \ 1.0.7 dieselbe Version (7.2.1) von Microsoft.WindowsAzure.Storage.dll hatte. –

+0

fyi fast ein Jahr später ist es immer noch Version 7.2.1 von WindowsAzure.Storage, die Sie verwenden sollten. – Rory

1

Gemäß Ihrer Beschreibung habe ich dieses Problem über die Bindung an die Tabellenausgabe getestet, ich könnte es wie erwartet funktionieren lassen. Hier ist mein Code-Snippet, auf das Sie sich beziehen könnten.

function.json

{ 
    "bindings": [ 
    { 
     "name": "inputBlob", 
     "type": "blobTrigger", 
     "direction": "in", 
     "path": "input/{name}", 
     "connection": "AzureStorageConnectionString" 
    }, 
    { 
     "type": "table", 
     "name": "outTable", 
     "tableName": "UploadFile", 
     "connection": "AzureStorageConnectionString", 
     "direction": "out" 
    } 
    ], 
    "disabled": false 
} 
  • ICollector<T>
#r "Microsoft.WindowsAzure.Storage" 

using Microsoft.WindowsAzure.Storage.Table; 
using Microsoft.WindowsAzure.Storage.Blob; 

public static void Run(CloudBlockBlob inputBlob, ICollector<UploadFile> outTable, TraceWriter log) 
{ 
    string blobUri=inputBlob.StorageUri.PrimaryUri.ToString(); 
    log.Info($"C# Blob trigger function triggered, blob path: {blobUri}"); 

    outTable.Add(new UploadFile() 
    { 
     PartitionKey = "Functions", 
     RowKey = Guid.NewGuid().ToString(), 
     Name = blobUri 
    }); 
} 

public class UploadFile : TableEntity 
{ 
    public string Name { get; set; } 
} 
  • CloudTable
#r "Microsoft.WindowsAzure.Storage" 

using Microsoft.WindowsAzure.Storage.Table; 
using Microsoft.WindowsAzure.Storage.Blob; 

public static void Run(CloudBlockBlob inputBlob,CloudTable outTable, TraceWriter log) 
{ 
    string blobUri=inputBlob.StorageUri.PrimaryUri.ToString(); 
    log.Info($"C# Blob trigger function triggered, blob path: {blobUri}"); 

    outTable.Execute(TableOperation.Insert(new UploadFile() 
    { 
     PartitionKey = "Functions", 
     RowKey = Guid.NewGuid().ToString(), 
     Name = blobUri 
    })); 
} 

public class UploadFile : TableEntity 
{ 
    public string Name { get; set; } 
} 

Code ändern und klicken Sie auf Speichern , wenn die Kompilierung erfolgreich ausgeführt wird, dann, wenn die Funktion ausgelöst wird, können Sie das folgende Protokoll sehen und die Aufzeichnung zu Azure Tabellen Speicher hinzugefügt wird.

Für weitere Informationen können Sie auf dieser offiziellen document Lager siehe Tabelle für Azure-Funktion zu binden.

+1

Vielen Dank für die vollständige Antwort. Aber, in meinem Fall verwende ich eine kompilierte Azure-Funktion, nicht CSX im Azure-Portal. Im Portal funktioniert es gut. In meiner vorkompilierten Funktion funktioniert es nicht. – gabomgp

1

Wirklich, diese Antwort ist von jemandem (ich erinnere mich nicht an den Namen) im Team von Azure Funktionen, hier in dieser Frage, aber er löscht ihre Antwort.Er sagt, dass das Problem sicherlich darin liegt, eine andere Version der DLL zu haben, die man erwartet. Ich kann bestätigen, dass dies das Problem war.

Die Lösung besteht darin, die Version der in AppData \ Local \ Azure.Functions.Cli \ 1.0.0-beta.91 verwendeten DLLs zu überprüfen und sie in der Lösung zu verwenden.

+1

Die Antwort wurde in der Überprüfung gelöscht, also habe ich gerade aktualisiert und "gelöscht" –

Verwandte Themen