使用Microsoft.Azure.Storage(cosmosDB)更新表对象失败

时间:2018-02-13 15:18:13

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

我无法使用Microsoft.Azure.CosmosDB.Table更新表对象并获得以下异常。 “消息:服务器上不再提供所请求的资源。”代码:走了 我可以毫无问题地运行选择。

使用命名空间Microsoft.WindowsAzure我可以进行查询和更新。 此代码也适用于devdb存储 或者如果我将连接字符串更改为Azure表存储。唯一不起作用的是指向CosmosDb。

`

Microsoft.Azure.Storage;
using Microsoft.Azure.CosmosDB.Table;

namespace AzureTester
{
class Program
{
    static void Main(string[] args)
    {
        //cosmosdb.azure these don't work for TableOperation.InsertOrMerge(x).  They do for Selects
        var connectionString = "........TableEndpoint=https://*****.table.cosmosdb.azure.com:443/;";

        //table storage or dev this works for everything
        //var connectionString = ".....EndpointSuffix=core.windows.net";
        //var connectionString = "UseDevelopmentStorage=true;";

        var storageAccount = CloudStorageAccount.Parse(connectionString);
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
        var table = tableClient.GetTableReference("Boat");

        TableQuery<Boat> query = new TableQuery<Boat>()
            .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "jack"));

        var returnedBoat = table.ExecuteQuerySegmentedAsync<Boat>(query, null).Result; //this always works.

        Boat x = new Boat();
        x.PartitionKey = "jack";
        x.RowKey = "black";
        x.Type = "dragon";
        TableOperation insertOrMergeOperation = TableOperation.InsertOrMerge(x);
        //hangs on this line when connection string is cosmosdb.azure.com
        TableResult result = table.Execute(insertOrMergeOperation);
        Boat inserted = result.Result as Boat;
    }

3 个答案:

答案 0 :(得分:1)

当Cosmos DB Table API问世时,我认为他们使用了名称空间Microsoft.Azure.Storage,但他们现在使用的是Microsoft.Azure.CosmosDB.Table。此外,从您的代码中,您不清楚是否要访问Cosmos数据库表或Azure存储表。如果要访问Azure存储表,则必须使用WindowsAzure.Storage。*程序集,然后才能访问存储帐户。

如果要访问CosmosDB表中的数据,则必须使用其Table API,并且数据必须位于Cosmos DB数据库中,而不是Azure存储中。有关使用.NET访问Cosmos DB表的示例,请参阅Quickstart: Build a Table API app with .NET and Azure Cosmos DB

答案 1 :(得分:0)

尝试使用版本8.6.0或Microsoft.Azure.Storage.Common的8.7.0

卸载Microsoft.Azure.CosmosDB.Table.1.1.0。然后卸载Microsoft.Azure.Storage.Common.9.0.0.1-preview。然后安装Microsoft.Azure.Storage.Common.8.6.0-preview或Microsoft.Azure.Storage.Common.8.7.0.1-preview。然后最后安装Microsoft.Azure.CosmosDB.Table.1.1.0。

答案 2 :(得分:0)

失败是由我本地电脑/网络上的某些内容引起的。我怀疑McAfee Endpoint Security与此帖子类似:Azure DocumentDB sporadically throws SocketException / GoneException

相同的代码在家用电脑上运行良好。虽然我没有确定可能是防病毒或防火墙保护的确切错误。

我没有解释为什么McAfee允许Microsoft.WindowsAzure而不是Microsoft.Azure