как закрыть клиентское соединение и вернуть звонок в NETMQ? - PullRequest
1 голос
/ 07 февраля 2020

Я только начал использовать шаблон NETMQ REQ / RES для отправки и получения ответа на запрос с обоих концов. Клиент из IIS, а сервер из windows. У меня вопрос, когда я остановил службу и попробовал запрос клиента. Клиент пошел к бесконечному L OOP и не возвращается.

Код сервера

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>";
        }
    }
}

Код не может быть возвращен. Пожалуйста, помогите мне заранее спасибо

1 Ответ

1 голос
/ 09 февраля 2020

Это нормальное поведение. Розетки 0MQ не выходят из строя, если другая конечная точка отключается. Вместо сокета Send метод будет ждать, пока сервер не станет доступным. Если это нежелательное поведение, вы должны либо использовать dontWait аргумент метода Send, либо изменить весь подход к опросу данных с сервера.

...