Web API Service Fabric 中的损坏
Web API Corruption in Service Fabric
我在我的服务结构集群中遇到了两个关于 Web API 无状态服务的怪事。第一个是关于对有状态服务调用的响应缺少的属性。当对 GET 的响应从 class 更改为结构时,第二个是严重错误。详情如下。
问题 #1 - 缺少属性
我有三个项目:
- 一个 class 库,其中有一个名为 Person 的 class。下面的两个项目利用这个库查看私有 nuget 包。
- 无状态 Web API,它有一个 GET 来检索所有的人。
- 一个有状态的服务,实现了一个包含所有人的 ReliableDictionary。 Stateless Web API 调用了一个方法,returns 所有人都来自这本字典。
问题是我最近更新了我的 class 库,为 Person 提供了一些新属性(比如 CreatedOn)。 Stateless Web API 和 Stateful Service 都有这个包的最新版本并且被部署(覆盖,而不是升级)。 Stateful Service 正确识别并存储这些新属性。然而,Web API 以某种方式无法创建没有这些新属性的对象。并不是说它们是空的,它们只是根本不存在!
我已经尝试 uninstalling/reinstalling nuget 包,以及清除 bin/obj 文件夹。两者都不起作用。但是,创建一个新的 Web API Service fabric 项目确实有效。
有任何想法,或者我的项目是否已损坏?
楼盘图片:
问题 #2 - 结构崩溃 Web API
这可能与第一个问题有关,并且使用相同的库和服务。我尝试将 Person 对象更改为结构,但对 api 的任何调用都会引发以下错误:
{
"Message": "An error has occurred.",
"ExceptionMessage": "The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application's startup code after all other initialization code.",
"ExceptionType": "System.InvalidOperationException",
"StackTrace": " at System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes()\r\n at System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request)\r\n at System.Web.Http.HttpRouteCollection.GetRouteData(HttpRequestMessage request)\r\n 在 System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage 请求,CancellationToken cancellationToken)\r\n 在 System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage 请求,CancellationToken cancellationToken)\r\n 在 System.Web.Http.HttpServer。d__0.MoveNext()"
}
同样,在另一个相同的 Web API 项目中尝试此操作效果很好。
想法?
当我使用格式错误的路由时,我得到了同样的结果
示例
[路线("/api/info")]
正确的是
[路线("api/info")]
我在我的服务结构集群中遇到了两个关于 Web API 无状态服务的怪事。第一个是关于对有状态服务调用的响应缺少的属性。当对 GET 的响应从 class 更改为结构时,第二个是严重错误。详情如下。
问题 #1 - 缺少属性
我有三个项目:
- 一个 class 库,其中有一个名为 Person 的 class。下面的两个项目利用这个库查看私有 nuget 包。
- 无状态 Web API,它有一个 GET 来检索所有的人。
- 一个有状态的服务,实现了一个包含所有人的 ReliableDictionary。 Stateless Web API 调用了一个方法,returns 所有人都来自这本字典。
问题是我最近更新了我的 class 库,为 Person 提供了一些新属性(比如 CreatedOn)。 Stateless Web API 和 Stateful Service 都有这个包的最新版本并且被部署(覆盖,而不是升级)。 Stateful Service 正确识别并存储这些新属性。然而,Web API 以某种方式无法创建没有这些新属性的对象。并不是说它们是空的,它们只是根本不存在!
我已经尝试 uninstalling/reinstalling nuget 包,以及清除 bin/obj 文件夹。两者都不起作用。但是,创建一个新的 Web API Service fabric 项目确实有效。
有任何想法,或者我的项目是否已损坏?
楼盘图片:
问题 #2 - 结构崩溃 Web API
这可能与第一个问题有关,并且使用相同的库和服务。我尝试将 Person 对象更改为结构,但对 api 的任何调用都会引发以下错误:
{ "Message": "An error has occurred.", "ExceptionMessage": "The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application's startup code after all other initialization code.", "ExceptionType": "System.InvalidOperationException", "StackTrace": " at System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes()\r\n at System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request)\r\n at System.Web.Http.HttpRouteCollection.GetRouteData(HttpRequestMessage request)\r\n 在 System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage 请求,CancellationToken cancellationToken)\r\n 在 System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage 请求,CancellationToken cancellationToken)\r\n 在 System.Web.Http.HttpServer。d__0.MoveNext()" }
同样,在另一个相同的 Web API 项目中尝试此操作效果很好。
想法?
当我使用格式错误的路由时,我得到了同样的结果 示例
[路线("/api/info")]
正确的是
[路线("api/info")]