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"
给定两个都包含库的 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"