C#Web套接字服务器无法正常工作

时间:2018-09-28 13:28:12

标签: c#-4.0 websocket

我在c#项目中使用异步套接字服务器读取rfid标签。 客户端应用程序会读取第一个rfid标签,并将包含rfid详细信息的字符串发送到我的套接字控制器。

客户端应用程序生成队列并将字符串发送到套接字。在我的套接字控制器中,我读取字符串并从数据库中获取数据,然后将结果模型发送给集线器。

有时我的客户端应用程序不响应快速的标签读取。我是否应该进行任何更改以加快套接字服务器的速度。

    public async Task ProcessWSChat(AspNetWebSocketContext context)
        {
            WebSocket socket = context.WebSocket;
            while (true)
            {
                ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
                WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
                if (socket.State == WebSocketState.Open)
                {
                    DateTime currentDate = DateTime.Now;
                    string userMessage = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                    //userMessage = "Vehicle RFID No: " + userMessage + " passed at " + DateTime.Now.ToLongTimeString();
                    string[] subStrings = userMessage.Split('~');


                    #region Vehicle details

                    List<M999GET_RFID_PASSES_Result> rfidDetails = await GetRfidDetails(subStrings[2], subStrings[3]);

                    if (rfidDetails.Count() > 0)
                    {

                        string status = "null";
                        if (rfidDetails.FirstOrDefault().MRT_TAG_STATUS == 1)
                        {
                            status = "ACTIVE";
                        }
                        if (rfidDetails.FirstOrDefault().MRT_TAG_STATUS == 2)
                        {
                            status = "BLACKLIST";
                        }

                        //VHEDETAILViewModel testcus = new VHEDETAILViewModel
                        //{
                        //    VHE_CODE = "test",
                        //    VHE_NAME = vheDetails.FirstOrDefault().VHE_NAME,
                        //    VHE_RFID_TAG = subStrings[1],
                        //    DESCRIPTION = rfidDetails.FirstOrDefault().MTR_PERMIT_NO,
                        //    GATE_NAME = selectLocation.FirstOrDefault().LOCATION_NAME,
                        //    VHE_NO = rfidDetails.FirstOrDefault().MTR_IDENTIFICATION_NO,
                        //    VHE_TYPE = rfidDetails.FirstOrDefault().MRT_PASS_TYPE, //1- Toyota Vehicles 2-External Vehicles
                        //    CURRENT_DATETIME = currentDate,
                        //    STATUS = status,
                        //    PASSTYPE = rfidDetails.FirstOrDefault().MRT_PASS_TYPE.ToString()
                        //};

                        PermitDetailsHeader rfidDetail = new PermitDetailsHeader
                        {

                            PermitNo = rfidDetails.FirstOrDefault().MTR_PERMIT_NO,
                            IdentificationNo = rfidDetails.FirstOrDefault().MTR_IDENTIFICATION_NO,
                            CURRENT_DATETIME = currentDate,
                            Status = status,
                            passType = rfidDetails.FirstOrDefault().MRT_PASS_TYPE.ToString(),
                            tid = subStrings[2],
                            passId = rfidDetails.FirstOrDefault().MRT_PASS_ID,
                            readerIp = subStrings[3]
                        };

                        var subscribed = Hub.Clients.All;
                        subscribed.addItem(rfidDetail);

                        buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMessage));
                        await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
                    }
                    #endregion
                }
                else
                {
                    break;
                }
            }
        }

0 个答案:

没有答案