Service Fabric 中的 Web API 损坏

Posted

技术标签:

【中文标题】Service Fabric 中的 Web API 损坏【英文标题】:Web API Corruption in Service Fabric 【发布时间】: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 项目中尝试这个就可以了。

想法?

【问题讨论】:

【参考方案1】:

当我使用格式错误的路线时,我得到了同样的结果 例子

[路线(“/api/info”)]

正确的是

[路线(“api/info”)]

【讨论】:

看起来是这样的。谢谢!

以上是关于Service Fabric 中的 Web API 损坏的主要内容,如果未能解决你的问题,请参考以下文章

在 Service Fabric 上托管 Web API

Web API Service Fabric 应用程序提供未经授权的

从 Azure Service Fabric 中的不同应用程序与无状态 Web Api 服务通信

SignalR 与 Service Fabric 无状态 Web API

构建 Service Fabric Web Api 时出现错误无法从 Fabric.StatelessServiceContext 转换为 Fabric.ServiceInitializationPa

Service Fabric Web API 版本控制问题