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