private string AttemptSend(string method, byte[] data, string docType) { EventSource.Raise(Event.MethodEnter, method, Event.Arg("data", data), Event.Arg("docType", docType)); string response = null; try { if (!LensSession.IsOpen()) { LensSession.Open(); } EventSource.Raise(Event.Information, method, "Sending request to Lens.", Event.Arg("Host", LensSession.GetHost()), Event.Arg("Port", LensSession.GetPort()), Event.Arg("Timeout", Timeout)); response = TagResume(data, docType); EventSource.Raise(Event.Information, method, "Received response from Lens.", Event.Arg("Response", response)); ParseForErrors(response); return(response); } catch (LensException ex) { EventSource.Raise(Event.Error, method, ex, null, Event.Arg("data", data), Event.Arg("docType", docType), Event.Arg("response", response)); throw; } catch (Exception ex) { EventSource.Raise(Event.Error, method, ex, null, Event.Arg("data", data), Event.Arg("docType", docType), Event.Arg("response", response)); if (ex.InnerException is SocketException) { throw new LensUnavailableException(string.Format("Failed to connect to Lens server {0}:{1}.", LensSession.GetHost(), LensSession.GetPort()), ex); } else if (ex.InnerException is XmlException) { throw new LensXmlInvalidException("The XML returned from Lens is invalid.", ex); } else { throw new LensException(ex.Message, ex); } } finally { LensSession.Close(); EventSource.Raise(Event.MethodExit, method, Event.Arg("data", data), Event.Arg("docType", docType), Event.Arg("response", response)); } }