客户端未收到响应:“找不到消息类型的处理程序”

Cleint not receive response: “No handlers could be found for message type”

我有一个 .net 核心服务需要通过 nservicebus 发送请求。 我用 DI 解析 IMessageSession 并发送这样的请求:

var response = await messageSession.Request<CreateDeviceResponse>(request);

在日志中我看到另一个服务收到了这个请求并发送了回复:

一直没有收到回复的问题。 客户端收到这样的错误:

我知道如果客户端和服务器端点名称相同可能会出现这样的问题,但我检查过并使用了不同的名称

asp 网络 mvc 4.7.2

首先,消息并没有丢失,而是在错误队列中。

我建议按照教程了解 NServiceBus 的工作原理以及您需要在什么地方安装什么。 tutorials start here but an entire learning path starts here 它解释更广泛,包括一般概念和体系结构。

就像@tchelidze 提到的那样,您需要实现 IHandleMessages<CreateDeviceReponse> 接口,就像 here in the tutorial 概述的那样。此外,将它发送到哪个端点并不重要。 EndpointA 可以发送到 EndpointBEndpointA。你不能做的是有两个同名的端点。这就像有两台名为 MachineA 的计算机,然后从 MachineB 尝试访问 MachineA 上的文件。 MachineB 应该连接到两者中的哪一个?还有一个叫做 'competing consumer pattern' 的东西,但那是以后要关心的问题 ;-)

如果您需要更多帮助,请随时在 https://discuss.particular.net/ 询问更多 NServiceBus 社区成员所在的位置,以及 NServiceBus 本身的工程师。

出于某种原因,它有助于在任务中发出请求:

Task.Run(async () => await messageSession.Request<CreateDeviceResponse>(request))

我还是不明白问题出在哪里,但它只适用于这样的实现。 在 .net core web API 中,即使没有 Task.Run,它也能正常工作,所以我相信这与我在 asp net mvc 4.7.2[ 中提出这个请求有关=11=]