Пример #1
0
        /// <summary>
        ///		Procesa el sistema de autentificación
        /// </summary>
        public void Process(Messages.RequestMessage objRequest)
        {
            string strAuthorization = User + ":" + Password;

            // Codifica en Base64 la cadena de usuario y contraseña
            strAuthorization = new Encoders.BinayEncoder().Encode(strAuthorization, false);
            // Añade la cabecera de autorización
            objRequest.Headers.Add("Authorization", "Basic " + strAuthorization);
        }
Пример #2
0
        private async Task <ResultDataType> ExecuteScalarAsync <ResultDataType>(Messages.RequestMessage Message)
        {
            using (var Socket = new ClientWebSocket())
            {
                await Socket.ConnectAsync(Uri, System.Threading.CancellationToken.None);

                try
                {
                    return(await ExecuteScalarAsync <ResultDataType>(Socket, Message));
                }
                finally
                {
                    await Socket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, null, System.Threading.CancellationToken.None);
                }
            }
        }
Пример #3
0
        private byte[] GetMessageBytes(Messages.RequestMessage Message)
        {
            var Json = JsonConvert.SerializeObject(Message);

            if (UseBinary)
            {
                var SB = new StringBuilder();
                SB.Append((char)("application/json".Length));
                SB.Append("application/json");
                SB.Append(Json);
                return(System.Text.Encoding.UTF8.GetBytes(SB.ToString()));
            }
            else
            {
                return(System.Text.Encoding.UTF8.GetBytes(Json));
            }
        }
Пример #4
0
        protected override void DoProcessRequestItems(Messages.RequestMessage requestMessage, Messages.ResponseMessage responseMessage)
        {
            // 요청작업이 병렬로 처리해서는 안될 경우를 대비
            //
            if (requestMessage.AsParallel == false)
            {
                base.DoProcessRequestItems(requestMessage, responseMessage);
                return;
            }

            if (IsDebugEnabled)
            {
                log.Debug("요청항목들을 병렬로 처리합니다...");
            }

            // 병렬로 작업을 처리하고, 응답메시지에 추가합니다.
            requestMessage.Items
            .AsParallel()
            .AsOrdered()
            .ForAll(requestItem => {
                var responseItem = DoProcessRequestItem(requestItem);
                responseMessage.Items.Add(responseItem);
            });
        }
Пример #5
0
        private async Task <ResultDataType> ExecuteScalarAsync <ResultDataType>(ClientWebSocket Socket, Messages.RequestMessage Message)
        {
            byte[] MessageBytes = GetMessageBytes(Message);
            await Socket.SendAsync(new ArraySegment <byte>(MessageBytes), UseBinary?WebSocketMessageType.Binary : WebSocketMessageType.Text, true, System.Threading.CancellationToken.None);

            while (true)
            {
                var MS     = new System.IO.MemoryStream();
                var Buffer = new ArraySegment <byte>(new byte[ReadBufferSize]);
                while (true)
                {
                    var Data = await Socket.ReceiveAsync(Buffer, System.Threading.CancellationToken.None);

                    MS.Write(Buffer.Array, 0, Data.Count);
                    if (Data.EndOfMessage)
                    {
                        break;
                    }
                }
                var ResponseString = System.Text.Encoding.UTF8.GetString(MS.ToArray());
                var Response       = JsonConvert.DeserializeObject <Messages.ScriptResponse <ResultDataType> >(ResponseString);

                if (Response.Result.Data != null && Response.Result.Data.Count > 0)
                {
                    return(Response.Result.Data[0]);
                }

                switch (Response.Status.Code)
                {
                case 200:     // SUCCESS

                case 204:     // NO CONTENT
                    logger.Info("HTTP 204 NO CONTENT");
                    return(default(ResultDataType));

                case 401:
                    logger.Error("HTTP 401 UNAUTHORIZED");
                    throw new Exceptions.UnauthorizedException(Response.Status.Message);

                case 407:     // AUTHENTICATE
                    logger.Error("HTTP 407 Proxy Authentication Required");
                    if (string.IsNullOrEmpty(Username) || string.IsNullOrEmpty(Password))
                    {
                        throw new Exceptions.UnauthorizedException(Response.Status.Message);
                    }

                    MessageBytes = GetMessageBytes(new Messages.AuthenticationRequestMessage
                    {
                        Arguments = new Messages.AuthenticationRequestArguments(Username, Password)
                    });
                    await Socket.SendAsync(new ArraySegment <byte>(MessageBytes), UseBinary?WebSocketMessageType.Binary : WebSocketMessageType.Text, true, System.Threading.CancellationToken.None);

                    break;

                case 498:
                    logger.Error("Malformed Request: " + Response.Status.Message);
                    throw new Exceptions.MalformedRequestException(Response.Status.Message);

                case 499:
                    logger.Error("Invalid Request Arguments: " + Response.Status.Message);
                    throw new Exceptions.InvalidRequestArgumentsException(Response.Status.Message);

                case 500:
                    logger.Error("HTTP 500 Server Error");
                    throw new Exceptions.ServerErrorException(Response.Status.Message);

                case 597:
                    logger.Error("Script Evaluation Error. Maybe false Gremlin Statement? " + Response.Status.Message);
                    throw new Exceptions.ScriptEvaluationErrorException(Response.Status.Message);

                case 598:
                    logger.Error("Server Timeout Exception: " + Response.Status.Message);
                    throw new Exceptions.ServerTimeoutException(Response.Status.Message);

                case 599:
                    logger.Error("Server Serialization Error: " + Response.Status.Message);
                    throw new Exceptions.ServerSerializationError(Response.Status.Message);

                default:
                    throw new Exception("Unsupported StatusCode (" + Response.Status.Code + "): " + Response.Status.Message);
                }
            }
        }