c# - 在Azure表中创建表失败无异常

标签 c# azure-storage azure-table-storage

我正在尝试在 Windows Azure 表服务中创建一个表,使用示例 https://github.com/Azure-Samples/storage-table-dotnet-getting-started

运行此示例时,我没有任何问题:表会自行创建,插入和删除工作正常。

但是我作为代码复制到项目中的内容似乎无法正常工作。表创建显然失败,但没有返回任何异常。就像我的代码不会等待表创建完成一样。

有人能理解为什么吗?

感谢您的帮助!

这是我调用代码的方式:

public async void saveInAzureTable()
{
            AzureStorage azure = new AzureStorage();
            CloudTable table = await     AzureStorage.CreateTableAsync("randomtable123");
}

这是 AzureStorage 类:

    using System;
    using System.Threading.Tasks;
    using Microsoft.Azure;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.Wi`enter code here`ndowsAzure.Storage.Table;
    using Scraper.Models;

    namespace Scraper
    {
        public class AzureStorage
        {
            public async Task<TableResult> storeAdvertisementInAzure(CloudTable table, AdvertisementEntity entity)
        {
            TableOperation insertOrMergeOperation = TableOperation.InsertOrMerge(entity);
            TableResult result = await table.ExecuteAsync(insertOrMergeOperation);
            return result;
        }

        /// <summary>
        /// Validate the connection string information in app.config and throws an exception if it looks like 
        /// the user hasn't updated this to valid values. 
        /// </summary>
        /// <param name="storageConnectionString">Connection string for the storage service or the emulator</param>
        /// <returns>CloudStorageAccount object</returns>
        public static CloudStorageAccount CreateStorageAccountFromConnectionString(string storageConnectionString)
        {
            CloudStorageAccount storageAccount;
            try
            {
                storageAccount = CloudStorageAccount.Parse(storageConnectionString);
            }
            catch (FormatException)
            {
                Console.WriteLine("Invalid storage account information provided. Please confirm the AccountName and AccountKey are valid in the app.config file - then restart the application.");
                throw;
            }
            catch (ArgumentException)
            {
                Console.WriteLine("Invalid storage account information provided. Please confirm the AccountName and AccountKey are valid in the app.config file - then restart the sample.");
                Console.ReadLine();
                throw;
            }

            return storageAccount;
        }


        /// <summary>
        /// Create a table for the sample application to process messages in. 
        /// </summary>
        /// <returns>A CloudTable object</returns>
        public static async Task<CloudTable> CreateTableAsync(string tableName)
        {
            // Retrieve storage account information from connection string.
            CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(CloudConfigurationManager.GetSetting("StorageConnectionString"));

            // Create a table client for interacting with the table service
            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

            Console.WriteLine("Create a Table to store data from the scraper");

            // Create a table client for interacting with the table service 
            CloudTable table = tableClient.GetTableReference(tableName);
            try
            {
                if (await table.CreateIfNotExistsAsync())
                {
                    Console.WriteLine("Created Table named: {0}", tableName);
                }
                else
                {
                    Console.WriteLine("Table {0} already exists", tableName);
                }
            }
            catch (StorageException)
            {
                Console.WriteLine("If you are running with the default configuration please make sure you have started the storage emulator. Press the Windows key and type Azure Storage to select and run it from the list of applications - then restart the sample.");
                Console.ReadLine();
                throw;
            }

            Console.WriteLine();
            return table;
        }

    }
}

最佳答案

根据您的代码和描述,我猜您的代码无法创建表的原因与您的异步 saveInAzureTable 有关。

我猜你在控制台主方法或其他方法中调用了这个方法。

如果您的 main 方法已完全执行,则您的异步方法 saveInAzureTable 将不会执行创建表代码。它将结束所有异步方法。所以它可能不会毫无异常(exception)地创建表。

我建议您可以使用 Task 关键字而不是 void。然后你可以使用 wait 关键字来等待方法执行完毕。

 public static async Task saveInAzureTable()
        {
            AzureStorage azure = new AzureStorage();
            CloudTable table = await AzureStorage.CreateTableAsync("aaaaaa");
        }

调用此方法:

   saveInAzureTable().Wait();

关于c# - 在Azure表中创建表失败无异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013645/

相关文章:

c# - JavaScript 数组与 C# 数组

c# - 设计自定义随机类

azure - 仅用于 Windows Azure 上的 Blob 存储的小型库?

azure - 使用/etc/fstab挂载Azure文件时出现错误 'Dependency failed',但手动它可以工作

c# - 如何在辅助角色中使用 WCF 进行批量插入

C# Web Api - IValidatableObject validationContext 服务提供者为空

c# - 在 .NET Web 应用程序中实现 XML 请求

c# - 在 Visual Studio 中开发 Azure Function 时存储帐户无效

Azure 表存储筛选器查询

azure - 如何允许 GZIP 用于 Azure 表存储查询