gpt4 book ai didi

c# - 表服务上下文: Can't cast to unsupported type 'DateTimeOffset' exception when serializing

转载 作者:行者123 更新时间:2023-11-30 15:36:09 25 4
gpt4 key购买 nike

我一直在尝试为 Azure 设置新的 MVC Web 角色,连接到 Azure 表服务。我在 VS 2012 中使用了 1.8 Azure SDK 和 Azure 项目模板。我将所有 nuget 包更新到最新版本,但我仍然怀疑 WCF 对 DateTimeOffset 的支持存在问题,这是版本 5 中的新功能。

我有一个像这样的简单对象:

[DataServiceEntity()]
[DataServiceKey("PartitionKey", "RowKey")]
public class AppUser : TableEntity
{
}

我有一个 MVC 操作来创建一个新的 AppUser,如下所示:

var connectionString = CloudConfigurationManager.GetSetting("DataStorageConnectionString");
var storageAccount = CloudStorageAccount.Parse(connectionString);
var tableClient = storageAccount.CreateCloudTableClient();
var ctx = new TableServiceContext(tableClient);

ctx.AddObject("Users", user);
var response = ctx.SaveChanges();

当此代码在我的 MVC Web 角色中执行时,我的 connectString 的结果是 UseDevelopmentStorage=true。

SaveChanges 调用会导致以下异常:

System.NotSupportedException was caught
HResult=-2146233067
Message=Can't cast to unsupported type 'DateTimeOffset'
Source=System.Data.Services.Client
StackTrace:
at System.Data.Services.Client.ClientConvert.GetEdmType(Type propertyType)
at System.Data.Services.Client.DataServiceContext.WriteContentProperty(XmlWriter writer, String namespaceName, ClientProperty property, Object propertyValue)
at System.Data.Services.Client.DataServiceContext.WriteContentProperties(XmlWriter writer, ClientType type, Object resource, EpmSourcePathSegment currentSegment, Boolean& propertiesWritten)
at System.Data.Services.Client.DataServiceContext.CreateRequestData(EntityDescriptor box, Boolean newline)
at System.Data.Services.Client.DataServiceContext.SaveResult.CreateChangeData(Int32 index, Boolean newline)
at System.Data.Services.Client.DataServiceContext.SaveResult.BeginNextChange(Boolean replaceOnUpdate)
at System.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions options)
at MvcWebRole1.Controllers.UserController.Create(AppUser user) in c:\src\Azure1\MvcWebRole1\Controllers\UserController.cs:line 67
InnerException:

查看 TableEntity 时,Timestamp 属性的类型为 DateTimeOffset。我一直在调查这样的想法:我的构建中的依赖项之一是旧的并导致问题,但我无法识别任何旧版本。据我所知,我使用的是最新版本的SDK,最新版本的项目模板,并且更新了所有的包,所以我现在有点不知所措。

** 12/26 更新 **

我创建了一个新的控制台应用程序,仅使用存储客户端进行测试,并且能够完美地复制该行为。 Azure 存储客户端 nuget 包仅在一周多前发布,也许还没有发布的打算。我无法让它与开发存储或实时 Azure 一起使用,但恢复到 1.7 程序集(分别与 10 月和 6 月的 1.8 和 1.7 SDK 一起提供)需要进行一些重写,但它确实可以与两个开发一起使用存储和 Azure。

最佳答案

在我看来,您正在混合访问方法。 TableServiceContext来自1.x存储API,而TableEntity来自2.0存储API。

如果您想使用 1.x 库,请从 TableServiceEntity 而不是 TableEntity 派生,并且不要使用这些属性。如果您想使用 2.0 库,请使用 CloudTable 和 TableOperation 而不是 TableServiceContext。

关于c# - 表服务上下文: Can't cast to unsupported type 'DateTimeOffset' exception when serializing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com