【问题标题】:how to close the Client Connection and return the Call in NETMQ?如何关闭客户端连接并返回 NETMQ 中的调用?
【发布时间】:2020-02-09 18:37:27
【问题描述】:

我刚刚开始使用 NETMQ REQ/RES 模式来发送和接收来自两端的请求响应。客户端来自 IIS,服务器来自 Windows 服务。我的问题是当我停止服务并尝试客户端请求时。客户端进入无限循环并且不返回。

服务器代码

using (var server = new ResponseSocket())
{
    server.Bind("tcp://10.150.0.242:5556");
    while (true)
    {
        try
        {
            // using (var client = ctx.CreateRequestSocket())
            {
                string fromClientMessage = server.ReceiveString();
                string result = DigitalSignInitialization(fromClientMessage);
                server.Send(result);
                Console.WriteLine("From Client: {0}", fromClientMessage);
            }
        }
        catch(Exception Ex) { server.Send("Failure"); }

    }
}

客户端代码

using (NetMQContext ctx = NetMQContext.Create())
{ 
     using (var client = ctx.CreateRequestSocket())
     {
         //try
        // {
        //client.Connect("tcp://10.150.0.242:5556");
        client.Connect(strNCODE_ADDRESS);
                    client.Send(json);

        fromServerMessage = client.ReceiveString(new TimeSpan (0, 0, 0, 30));
                                    if(fromServerMessage != "Success")
        {
            fromServerMessage="Failure";

            return "<RESULT><DIGITAL_SIGNATURE>DIgital Signature Failed</DIGITAL_SIGNATURE></RESULT>";
        }
    }
}

代码无法返回。 请帮助我提前谢谢

【问题讨论】:

    标签: c# zeromq netmq


    【解决方案1】:

    这是正常行为。如果其他端点断开连接,0MQ 套接字不会失败。相反,套接字Send 方法将等待,直到服务器可用。如果这是不希望的行为,您应该使用 Send 方法的 dontWait 参数或重新设计从服务器轮询数据的整个方法。

    【讨论】:

    • Poller 如何在没有服务器的情况下工作。是否会立即返回客户端关于服务器未运行/无法通信的信息。
    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    相关资源
    最近更新 更多