Azure 存储表 ExecuteAsync 在检索 TableOperation 时挂起

Azure Storage Tables ExecuteAsync Hangs on Retrieve TableOperation

给定两个都包含库的 C# 应用程序(Web、测试、控制台或其他),当 运行 时,一个应用程序挂起而另一个应用程序 运行 完美无缺。

有问题的代码是检索 TableOperation 到此处显示的 Azure 存储表:

private async Task<bool> FindByIdAsync<TData>(string rowKey)
    where TData : class, ITableEntity
{
    var table = GetTable<TData>();
    var operation = TableOperation.Retrieve<TData>(
        rowKey.GeneratePartitionKey(), rowKey);
    var result = await table.ExecuteAsync(operation);
    ...
}

用于设置连接的所有参数在两个应用程序中都是相同的,并且代码是 运行ning 来自同一台机器。写入 Azure 存储表在两个应用程序中都有效。

问题是,为什么这在一个应用程序中有效,而在另一个应用程序中无效?

问题的原因是加载失败Newtonsoft.Json。如果库引用的 Newtonsoft 版本不在相关程序集绑定允许的范围内,则会发生故障。这是一个例子:

app.config / web.config of offending application

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
       <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
       <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
    </dependentAssembly>
</assemblyBinding>

app.config / web.config of working application

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
       <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
       <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
    </dependentAssembly>
</assemblyBinding>

Note the version range increased to support 7.0.0.0.

为不起作用的项目更新配置文件将允许它找到从引用库中包含的 Newtonsoft.Json 版本。

谢谢。我遇到了同样的问题,但有一个后台应用程序。该应用程序使用 Json 作为配置文件,但没有 Newtonsfot.Json 条目。我添加了可用的最新兼容版本的条目。

"Newtonsoft.Json": "9.0.1"