我一直在尝试为 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 一起使用,但从 10 月和 6 月分别恢复到 1.8 和 1.7 SDK 附带的 1.7 程序集需要一些重写,但它确实适用于两个开发存储和 Azure。