elasticsearch elasticsearch无法验证C#Nest客户端中的RepositoryRequest,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch elasticsearch无法验证C#Nest客户端中的RepositoryRequest,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch elasticsearch无法验证C#Nest客户端中的RepositoryRequest

elasticsearch elasticsearch无法验证C#Nest客户端中的RepositoryRequest,elasticsearch,nest,elasticsearch,Nest,更新到elasticsearch 7.5.1后,以下代码现在导致异常 “未找到入口点” 请注意,通过fiddler发出以下请求 POST http://localhost:9200/_snapshot/C__MYFOLDER_Backup/_verify HTTP/1.1 User-Agent: Fiddler Host: localhost:9200 Content-Type: application/json Content-Length: 0 返回 {"nodes":{"1cWG9trD

更新到elasticsearch 7.5.1后,以下代码现在导致异常 “未找到入口点”

请注意,通过fiddler发出以下请求

POST http://localhost:9200/_snapshot/C__MYFOLDER_Backup/_verify HTTP/1.1
User-Agent: Fiddler
Host: localhost:9200
Content-Type: application/json
Content-Length: 0
返回

{"nodes":{"1cWG9trDRi--6I-46lOlBw":{"name":"DESKTOP-5L01F6I"}}}
你知道是什么导致了这个问题吗? 不幸的是,关于这个问题没有任何文件

更新: 以不存在的目录作为参数调用代码

var verifyRepositoryResponse = this.elasticClient.Snapshot.VerifyRepository(new VerifyRepositoryRequest("C__DOESNOTEXIST_Backup"));
在这个场景中,我将得到预期的4xx响应。 在所有测试之前,存储库和数据库都已清理

更新: 高级错误信息:

"# FailureReason: Unrecoverable/Unexpected BadResponse while attempting POST on http://localhost:9200/_snapshot/C__MYFOLDER_Backup/_verify\r\n - [1] BadResponse: Node: http://localhost:9200/ Exception: EntryPointNotFoundException Took: 00:00:00.1859931\r\n# Audit 
exception in step 1 BadResponse:\r\nSystem.EntryPointNotFoundException: Entry point was not found.\r\n   at Elasticsearch.Net.Utf8Json.IJsonFormatter`1.Deserialize(JsonReader& reader, IJsonFormatterResolver formatterResolver)\r\n   at Deserialize(Object[] , 
JsonReader& , IJsonFormatterResolver )\r\n   at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Byte[] bytes, Int32 offset, IJsonFormatterResolver resolver)\r\n   at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Stream stream, 
IJsonFormatterResolver resolver)\r\n   at Elasticsearch.Net.DiagnosticsSerializerProxy.Deserialize[T](Stream stream)\r\n   at Elasticsearch.Net.ResponseBuilder.SetBody[TResponse](ApiCallDetails details, RequestData requestData, Stream responseStream, String 
mimeType)\r\n   at Elasticsearch.Net.ResponseBuilder.ToResponse[TResponse](RequestData requestData, Exception ex, Nullable`1 statusCode, IEnumerable`1 warnings, Stream responseStream, String mimeType)\r\n   at 
Elasticsearch.Net.HttpWebRequestConnection.Request[TResponse](RequestData requestData)\r\n   at Elasticsearch.Net.RequestPipeline.CallElasticsearch[TResponse](RequestData requestData)\r\n   at Elasticsearch.Net.Transport`1.Request[TResponse](HttpMethod method, 
String path, PostData data, IRequestParameters requestParameters)\r\n# Inner Exception: Entry point was not found.\r\nSystem.EntryPointNotFoundException: Entry point was not found.\r\n   at Elasticsearch.Net.Utf8Json.IJsonFormatter`1.Deserialize(JsonReader& 
reader, IJsonFormatterResolver formatterResolver)\r\n   at Deserialize(Object[] , JsonReader& , IJsonFormatterResolver )\r\n   at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Byte[] bytes, Int32 offset, IJsonFormatterResolver resolver)\r\n   at 
Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Stream stream, IJsonFormatterResolver resolver)\r\n   at Elasticsearch.Net.DiagnosticsSerializerProxy.Deserialize[T](Stream stream)\r\n   at 
Elasticsearch.Net.ResponseBuilder.SetBody[TResponse](ApiCallDetails details, RequestData requestData, Stream responseStream, String mimeType)\r\n   at Elasticsearch.Net.ResponseBuilder.ToResponse[TResponse](RequestData requestData, Exception ex, Nullable`1 
statusCode, IEnumerable`1 warnings, Stream responseStream, String mimeType)\r\n   at Elasticsearch.Net.HttpWebRequestConnection.Request[TResponse](RequestData requestData)\r\n   at Elasticsearch.Net.RequestPipeline.CallElasticsearch[TResponse](RequestData 
requestData)\r\n   at Elasticsearch.Net.Transport`1.Request[TResponse](HttpMethod method, String path, PostData data, IRequestParameters requestParameters)\r\n# Exception:\r\nElasticsearch.Net.UnexpectedElasticsearchClientException: Entry point was not found. ---> 
System.EntryPointNotFoundException: Entry point was not found.\r\n   at Elasticsearch.Net.Utf8Json.IJsonFormatter`1.Deserialize(JsonReader& reader, IJsonFormatterResolver formatterResolver)\r\n   at Deserialize(Object[] , JsonReader& , IJsonFormatterResolver 
)\r\n   at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Byte[] bytes, Int32 offset, IJsonFormatterResolver resolver)\r\n   at Elasticsearch.Net.Utf8Json.JsonSerializer.Deserialize[T](Stream stream, IJsonFormatterResolver resolver)\r\n   at 
Elasticsearch.Net.DiagnosticsSerializerProxy.Deserialize[T](Stream stream)\r\n   at Elasticsearch.Net.ResponseBuilder.SetBody[TResponse](ApiCallDetails details, RequestData requestData, Stream responseStream, String mimeType)\r\n   at 
Elasticsearch.Net.ResponseBuilder.ToResponse[TResponse](RequestData requestData, Exception ex, Nullable`1 statusCode, IEnumerable`1 warnings, Stream responseStream, String mimeType)\r\n   at Elasticsearch.Net.HttpWebRequestConnection.Request[TResponse](RequestData 
requestData)\r\n   at Elasticsearch.Net.RequestPipeline.CallElasticsearch[TResponse](RequestData requestData)\r\n   at Elasticsearch.Net.Transport`1.Request[TResponse](HttpMethod method, String path, PostData data, IRequestParameters requestParameters)\r\n   --- 
End of inner exception stack trace ---\r\n   at Elasticsearch.Net.Transport`1.Request[TResponse](HttpMethod method, String path, PostData data, IRequestParameters requestParameters)\r\n   at 
Nest.Specification.SnapshotApi.SnapshotNamespace.VerifyRepository(IVerifyRepositoryRequest request)\r\n   at InforsHT.Genesis.Infrastructure.Data.Repositories.ElasticBackupAndRestoreProxy.IsBackupLocationPresent(String backupLocation) in 
C:\\work\\eve\\Source\\InforsHT.Genesis.Infrastructure.Data\\Repositories\\ElasticBackupAndRestoreProxy.cs:line 44\r\n"

这是一个错误
VerifyRepositoryResponse
节点
属性使用
JsonFormatAttribute
进行属性化,当属性类型为
IReadOnlyDictionary
时,该属性期望反序列化
IDictionary
。这对于使用强类型格式化程序的底层JSON序列化程序是有问题的,
IJsonFormatter
,其中类型
T
必须完全匹配

我必须跟踪和解决这个问题。现在,您可以通过使用在高级客户机上公开的低级客户机来解决这个bug

var response = client.LowLevel.Snapshot.VerifyRepository<DynamicResponse>("C__MYFOLDER_Backup");
var response=client.LowLevel.Snapshot.VerifyRepository(“C_umyfolder_Backup”);

并遍历
动态响应
。或者,使用
StringResponse
并使用
JObject
JsonDocument
进行解析,然后遍历。

听起来像Elasticsearch.Net依赖项可能仍然是旧版本-尝试将Elasticsearch.Net更新到相同版本。您从哪个版本升级?您正在运行哪个版本的.NET framework/core?我通过NuGet Package manager进行了更新。以前的版本是5.2。我正在运行.NETFramework 7.4.2。请注意,所有其他代码(对Elastic.NET的相同引用)都在运行。你是说.NETFramework 4.7.2吗?是否有其他您认为可能相关的环境细节?是的,当然是第4.7.2条。不,除了我刚才更新的内容之外,我不知道其他相关的事情。好的。所以当目录存在于磁盘上时会发生
“未找到入口点”
,但当目录不存在时会返回404响应?当异常发生时,您是否获得异常/堆栈跟踪?如果是,你能把它包括在问题中吗?如果在应用程序中没有,则在Windows上的事件查看器中的应用程序事件中可能有一个。好的,谢谢!我会让你知道它是否有效!现在我得到了一个404,但毕竟,成功是真的。但是:提供不存在的repositoryname将导致完全相同的响应?请注意,有效和无效存储库的DynamicDictionary始终包含错误:System.Collections.Generic.KeyValuePair Key“type”string Value“repository_missing_exception”object{string}+非公共成员-[2]{[reason,[C:\MYFOLDER\Backup]missing]}System.Collections.Generic.KeyValuePair Key“reason”string Value“[C:\\MYFOLDER\\Backup]missing”object{string}您可以使用
StringResponse
,并编辑您的问题,为您认为存在的存储库添加响应JSON吗?实际上我传递了一个错误的参数(复制粘贴问题)适用于低级客户端版本。现在它可以正常工作了!
var response = client.LowLevel.Snapshot.VerifyRepository<DynamicResponse>("C__MYFOLDER_Backup");