C# 如何修复使用localhost初始化的请求/响应时MassTransit.EndpointNotFoundException?

C# 如何修复使用localhost初始化的请求/响应时MassTransit.EndpointNotFoundException?,c#,masstransit,C#,Masstransit,我们正在使用masstransit,其请求/响应模式如下所述: 由于某种原因,当使用localhost初始化总线时,我在响应端使用context.RespondAsync方法接收到MassTransit.EndpointNotFoundException 当总线用实际IP初始化时,它工作正常,没有任何异常 我们还将总线与其他模式的masstransit一起使用,并使用localhost进行初始化,没有任何问题 我们尝试在请求端同时使用Request和GetResponse模式,认为问题的根源可能

我们正在使用masstransit,其请求/响应模式如下所述:

由于某种原因,当使用localhost初始化总线时,我在响应端使用context.RespondAsync方法接收到MassTransit.EndpointNotFoundException

当总线用实际IP初始化时,它工作正常,没有任何异常

我们还将总线与其他模式的masstransit一起使用,并使用localhost进行初始化,没有任何问题

我们尝试在请求端同时使用Request和GetResponse模式,认为问题的根源可能在那里,但没有成功

以下是响应端的使用者代码,它在RespondAsync上生成异常:

public override async Task Consume(ConsumeContext<IImageRequest> context)
{
    var msg = context.Message;

    try
    {    
        var image = GetImage(msg.Id);

        await context.RespondAsync<IImageResult>(new
        {
            msg.Id,
            AImage = image
        });
    }
    catch (Exception e)
    {
        Logger.Instance.Error($"{e}");
    }
}

我想知道有没有解决办法?或者这是一个已知的问题


谢谢,

本地主机在文件C:\Windows\System32\Drivers\etc\hosts中定义。在某些机器上设置为IP地址,在另一台机器上设置为环回127.0.0.1。您可以编辑该文件。如果您试图连接到该地址,网络库通常会给出一个错误。问题可能出在服务器上。服务器应使用计算机IP地址。相反,服务器应该侦听IP.Any。服务器和客户端不能使用相同的IP地址和端口。因此,通常您会创建服务器IP。因此,当服务器和侦听器位于同一台机器上时,它与客户端不同。在请求端,总线初始化代码是什么?您必须在整个应用程序生命周期内配置并启动总线才能使用MassTransit。@AlexeyZimarev感谢-添加了初始化代码。@jdweng感谢-主机文件是默认文件(所有内容都有注释)-未定义本地主机。@YuvalBechor订阅服务器是什么?你从哪里开始乘公共汽车?
Task.Run(async () =>
{   
    var reqResClient =
        BusControl.GetBusControl.CreateRequestClient<IImageRequest, IImageResult>("requestimage");
    var req = new ImageRequest(msg.Id);
    var response = await reqResClient.Request(req); 
}).Wait();
_bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
    cfg.Durable = true;

    _host = cfg.Host(HostName, port, VirtualHost, h =>
    {
        h.Username(UserName);
        h.Password(Password);   
    });

    cfg.ReceiveEndpoint(host, subscriber.QueueName, ep =>
    {
        ep.Durable = !subscriber.AutoDelete;
        ep.AutoDelete = subscriber.AutoDelete;

        ep.Instance(subscriber.Consumer);

        if (subscriber.PrefetchCount.HasValue)
            ep.PrefetchCount = subscriber.PrefetchCount.Value;

        if (subscriber.ConcurrencyLimit.HasValue)
            ep.UseConcurrencyLimit(subscriber.ConcurrencyLimit.Value);
    });

    cfg.Message<T>(x =>
    {
        x.SetEntityName(entityName);
    });
});
public void Start()
{
    if (_state == BusState.NotInitialized)
        throw new InvalidOperationException("Cannot start bus. Bus is not initialized");

    _bus?.Start();

    _state = BusState.Started;
}