【发布时间】:2016-12-07 22:33:09
【问题描述】:
我在我的 Service Fabric 集群中遇到了两个关于 Web API 无状态服务的奇怪问题。第一个关于对有状态服务调用的响应中缺少的属性。第二个是对 GET 的响应从类更改为结构时的严重错误。详情如下。
问题 #1 - 缺少属性
我有三个项目:
- 具有名为 Person 的类的类库。下面的两个项目利用这个库查看私有 nuget 包。
- 一个无状态的 Web API,它有一个 GET 来检索所有的人。
- 一个有状态的服务,实现了一个包含所有人的 ReliableDictionary。无状态 Web API 调用一个方法,该方法返回此字典中的所有人。
问题是我最近更新了我的类库,为 Person 提供了一些新属性(例如 CreatedOn)。无状态 Web API 和有状态服务都具有此软件包的最新版本并已部署(覆盖,而不是升级)。有状态服务正确识别并存储这些新属性。但是,Web API 在某种程度上不会创建没有这些新属性的对象。并不是说它们是空的,它们只是根本不存在!
我已经尝试卸载/重新安装 nuget 包,以及清除 bin/obj 文件夹。两者都不起作用。但是,创建一个新的 Web API 服务结构项目确实有效。
有什么想法,或者我的项目是否被破坏了?
房产图片:
问题 #2 - 结构崩溃 Web API
这可能与第一个问题有关,并且使用相同的库和服务。我尝试将 Person 对象更改为结构,但是对 api 的任何调用都会引发以下错误:
{ "Message": "发生错误。", "ExceptionMessage": "对象尚未初始化。确保在应用程序的启动代码中调用 HttpConfiguration.EnsureInitialized() 在所有其他初始化代码之后。", "ExceptionType": "System.InvalidOperationException", "StackTrace": " 在 System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes()\r\n 在 System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request)\r\n 在 System.Web .Http.HttpRouteCollection.GetRouteData(HttpRequestMessage 请求)\r\n 在 System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage 请求,CancellationToken cancelToken)\r\n 在 System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage 请求, CancellationToken cancelToken)\r\n 在 System.Web.Http.HttpServer.d__0.MoveNext()" }
再一次,在另一个相同的 Web API 项目中尝试这个就可以了。
想法?
【问题讨论】:
标签: asp.net-web-api azure-service-fabric