public static async Task <PipeMessage> ProcessRequestAsync(PipeMessage request)
        {
            var needInstance = false;
            var result       = default(PipeMessage);
            var pipe         = new PipeClient(c_pipeName);

            try
            {
                result = await pipe.ProcessRequest(request);
            }
            catch (PipeServerBrokenPipeException)
            {
                needInstance = true;
            }
            catch (PipeServerNotFoundException)
            {
                needInstance = true;
            }

            if (needInstance)
            {
                await CreatePipeServer(c_pipeName);

                result = await pipe.ProcessRequest(request);
            }

            return(result);
        }
        public static PipeMessage FromString(string request)
        {
            if (string.IsNullOrEmpty(request))
            {
                return(Empty);
            }

            var xml = XElement.Parse(request);

            if (xml.Name != "Message")
            {
                throw new InvalidOperationException("Invalid request format");
            }

            var result = new PipeMessage
            {
                Name      = (string)xml.Attribute("Name"),
                IsError   = ((int?)xml.Attribute("IsError") ?? 0) > 0,
                ErrorCode = (string)xml.Attribute("ErrorCode"),
                ErrorText = (string)xml.Attribute("ErrorText")
            };

            foreach (var element in xml.Elements("Data"))
            {
                result[(string)element.Attribute("Key")] = element.Value;
            }

            return(result);
        }
Example #3
0
        public async Task <PipeMessage> ProcessRequest(PipeMessage message)
        {
            var resultMessage = await ProcessRequest(message.ToString());

            var result = PipeMessage.FromString(resultMessage);

            if (result.IsError)
            {
                throw new PipeServerException(result.ErrorCode, result.ErrorText);
            }
            return(result);
        }