2017-02-16 8 views
4

Я использую прекомпилированный Azure Функцию, которая выглядит:Скомпилированной Azure и CloudTable связывания выход не работают

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

связывание Выход выглядит:

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

Когда я удалить параметр schedulerTable из моей функции это работает. 'The сообщение о том, что хозяин бросает в моем лице:

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

Действительно, когда я добавить выходной таблицы связывания пытается с Diferent альтернатив, ничего не работает. Альтернативами, которые не работают, являются:

  • Планировщик параметровТаблица с типом SchedulerRegister. Класс SchedulerRegister наследует от TableEntity.
  • Планировщик параметровТип с типом ICollector.
  • Параметр schedulerTable с типом CloudTable. (пример выше).

Пожалуйста, ¿Как я могу это исправить? (Используйте привязку вывода к таблице azure)

ответ

8

Вероятно, вы столкнулись с проблемами несоответствия типов. Какую версию SDK для хранения вы используете? Вы должны убедиться, что ссылки на хранилище SDK соответствуют ожиданиям среды выполнения, которая в настоящее время составляет 7.2.1.

Пожалуйста, убедитесь, что вы ссылаетесь на версию SDK хранилища 7.2.1.

+0

Это было! Спасибо –

+0

Я не работал для меня. Я изменил SDK для хранения проектов до версии 7.2.1 и подтвердил, что AppData \ Local \ Azure.Functions.Cli \ 1.0.7 имел ту же самую версию (7.2.1) Microsoft.WindowsAzure.Storage.dll. –

+0

fyi почти год спустя это все еще версия 7.2.1 WindowsAzure.Storage, которую вы должны использовать. – Rory

1

Согласно вашему описанию, я протестировал эту проблему о привязке к выходу таблицы, я мог бы заставить ее работать должным образом. Вот мой фрагмент кода, вы можете обратиться к нему.

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; } 
} 

Измените код и нажмите Сохранить, если компиляция выполняется успешно, то, когда функция вызывается, вы можете увидеть следующий журнал и запись добавляется Azure Table Storage.

Для получения более подробной информации, Вы можете обратиться к этому официальному document о таблице хранения связывания для функции Azure.

+1

Благодарим за полный ответ. Но, в mi случае, я использую скомпилированную функцию azure, а не csx в лазурном портале. На портале это нормально. В моей предварительно скомпилированной функции это не работает. – gabomgp

1

Действительно, этот ответ от кого-то (я не помню названия) в команде Azure Functions, здесь, в этом вопросе, но он удаляет ее ответ.Он говорит, что проблема заключается в том, что у нее будет другая версия DLL. Я могу подтвердить, что это проблема.

Решение должно проверить версию DLL, используемую в AppData \ Local \ Azure.Functions.Cli \ 1.0.0-beta.91, и использовать ее в решении.

+1

Ответ был удален в обзоре, поэтому я только что обновил и «восстановил», –