C# 请求/响应适用于基本体,但不适用于对象
我使用以下命令设置了请求-响应消息:C# 请求/响应适用于基本体,但不适用于对象,c#,masstransit,C#,Masstransit,我使用以下命令设置了请求-响应消息: public class StatusUpdateRequestConsumer : IConsumer<StatusUpdateRequest> { private readonly IWmiService _wmiService; public StatusUpdateRequestConsumer(IWmiService wmiService) { _wmiService = wmiService;
public class StatusUpdateRequestConsumer : IConsumer<StatusUpdateRequest>
{
private readonly IWmiService _wmiService;
public StatusUpdateRequestConsumer(IWmiService wmiService)
{
_wmiService = wmiService;
}
public async Task Consume(ConsumeContext<StatusUpdateRequest> context)
{
var bios = _wmiService.GetBios();
await context.RespondAsync<StatusUpdateResponse>(
new StatusUpdateResponse()
{
// This line works fine and message is sent back instantly
Message = JsonConvert.SerializeObject(bios) //,
// Sending the actual object instead of a JSON
// representation as so doesn't work
// Bios = bios
}
);
}
}
公共类StatusUpdateRequestConsumer:IConsumer
{
专用只读IWmiService;
公共状态更新请求使用者(IWmiService wmiService)
{
_wmiService=wmiService;
}
公共异步任务使用(使用上下文)
{
var bios=_wmiService.GetBios();
等待上下文。响应异步(
新状态更新响应()
{
//这条线路工作正常,信息会立即发送回来
Message=JsonConvert.SerializeObject(bios)/,
//发送实际对象而不是JSON
//因此,表示不起作用
//Bios=Bios
}
);
}
}
通过对我的对象执行JsonConvert.SerializeObject()并发送结果来发送字符串时,消息会立即被接收,并且一切正常
当我试图用实际对象本身(在上面的例子中是bios)发送消息时,中的响应从未收到,但没有抛出异常或错误
我以为MassTransit会在发送消息之前以同样的方式序列化为JSON,有人知道为什么这样做不起作用吗?或者我可以应用任何其他故障排除方法来尝试查找报告的错误(如果有)
我尝试添加
IConsumer
和IConsumer
,但没有调用它们。在消息契约中使用内部系统类型并不总是最佳选择,通常是因为您可能会看到尝试序列化BIOS对象的情况。建议将该对象映射到消息约定定义的内容中,而不是依赖于内部系统类型
这就是说,消息可能正在发送,但由于缺少程序集引用或其他原因,无法在接收端进行反序列化,这也是为什么最好不要使用系统类型进行序列化的原因。您可能能够序列化它,但它在反序列化上失败,因为它生成一个ReceiveFault,或者可能只是发布了一个错误
,而不是一个错误
,因为它无法反序列化该类型