RabbitMQ CreateConneciton问题 - 在一个应用程序中运行,但在另一个应用程序中运行

时间:2017-01-03 10:36:23

标签: c# wpf rabbitmq

所以这是连接代码。

var factory = new ConnectionFactory
{
    HostName = "myserver",
    UserName = "testuser",
    Password = "testuserpassword"
};

using (var connection = factory.CreateConnection())
 using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare(queue: "LOG",
                                 durable: false,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);

            string message = "Hello World!";
            var body = Encoding.UTF8.GetBytes(message);

            channel.BasicPublish(exchange: "",
                                 routingKey: "LOG",
                                 basicProperties: null,
                                 body: body);
            Console.WriteLine(" [x] Sent {0}", message);
        }

我在一个控制台应用程序中测试它,一切正常,我可以发送和接收消息。

如果我然后将上面相同的代码复制并粘贴到我的WPF应用程序中,我会在这里得到一个例外

connection = factory.CreateConnection()

异常

  

抛出异常:' System.ArgumentException'在RabbitMQ.Client.dll

中      

其他信息:myserver无法解析IP地址

如果我改变了#34; myserver"到服务器IP我得到了同样的错误。 不明白为什么代码在一个应用程序中工作而不在另一个应用程序中。

4 个答案:

答案 0 :(得分:6)

问题解决了。它看起来像Exception设置一样简单。由于某种原因,控制台应用程序设置为不中断连接异常,并且WPF应用程序设置为中断。一切现在都有效。

奇怪的是,正在生成异常,特别是关于不解析服务器名称或IP地址,但它仍然有效。

答案 1 :(得分:1)

我遇到了这个问题-我认为与异常设置无关。

答案 2 :(得分:0)

这样做是因为异常设置,如果您查看RMQ .net客户端源代码,一开始它将尝试将您的IP地址与IPv6协议连接,如果您要连接IPv4地址,则此步骤将失败并抛出System.ArgumentException:无法为“您的IP地址”解析IP地址,但是RMQ .net客户端将捕获此异常,并继续尝试将您的IP地址与IPv4协议连接。

Output
formatter now from Json ==> 30/12/2019
formatter now from Json replace / symbol to - symbol ==> 30-12-2019
formatter yourDate from Json Result  after parse string to date ==> 23-12-2018
formatter showDate from Json Result  after parse string to date ==> December, 23 2018

如果设置为中断连接异常,则强制ArgumentException引发。

 if (ShouldTryIPv6(endpoint))
        {
            try {
                m_socket = ConnectUsingIPv6(endpoint, socketFactory, connectionTimeout);
            } catch (ConnectFailureException)
            {
                m_socket = null;
            }
        }

        if (m_socket == null && endpoint.AddressFamily != AddressFamily.InterNetworkV6)
        {
            m_socket = ConnectUsingIPv4(endpoint, socketFactory, connectionTimeout);
        }

答案 3 :(得分:0)

我通过在Visual Studio中禁用我的代码并运行该应用程序解决了 CreateConnection 问题。首先,我被指出了错误的方向,因为Masstransit在网络库中在功能上使用了throw。这让我感觉到我的配置设置错误或我的服务未运行,因此无法访问。

在顽固的额外F5之后,我收到一个错误,提示无法加载程序集 System.Threading.Tasks.Extensions 。我为此添加了绑定重定向,并且一切正常运行:

int