public string AddDocument(string transactionId, ExecuteContentResult result) { string docName = Path.ChangeExtension(Guid.NewGuid().ToString(), CommonContentAndFormatProvider.GetFileExtension(result.Content.Type)); Document doc = new Document(docName, result.Content.Type, result.Content.Content); return(AddDocument(transactionId, result.Status, null, doc)); }
public ExecuteContentResult ProcessExecute(string requestId) { AppendAuditLogEvent("NCT ProcessExecute() enter"); LazyInit(); DataRequest dataRequest = _requestManager.GetDataRequest(requestId); ExecuteContentResult result = new ExecuteContentResult(); result.Content = new SimpleContent(); int actualCount; bool isLast; string documentName; result.Content.Type = CommonContentType.ZIP; result.Content.Content = CreateRandomXMLQueryResult(true, 0, -1, out actualCount, out isLast, out documentName); result.Status = CommonTransactionStatusCode.Processed; AddReportDocumentToTransaction(dataRequest.TransactionId, true); AppendAuditLogEvent("NCT ProcessExecute() exit"); return(result); }
public ExecuteContentResultEx Execute(ServiceContentRequest request, NamedEndpointVisit visit) { Activity activity = null; string transactionId = null; try { NodeVisit nodeVisit; MakeEndpointActivity(visit, ActivityType.Audit, NodeMethod.Execute, out nodeVisit, out activity); if (request == null) { throw FaultProvider.GetFault(visit.Version, ENExceptionCodeType.E_InvalidParameter, "Empty input request"); } if ((request.Interface == null) || string.IsNullOrEmpty(request.Interface)) { throw FaultProvider.GetFault(visit.Version, ENExceptionCodeType.E_InvalidParameter, "Input interface is null"); } bool isFlowProtected; string flowId = FlowManager.GetDataFlowIdByName(request.Interface, out isFlowProtected); if (flowId == null) { throw FaultProvider.GetFault(visit.Version, ENExceptionCodeType.E_InvalidDataflow, "Interface \"{0}\" was not found", request.Interface); } activity.FlowName = request.Interface; activity.Operation = request.OperationName; DataService executeService = FlowManager.GetExecuteServiceForFlow(flowId, request.OperationName); if ((executeService == null) || !executeService.IsActive) { throw FaultProvider.GetFault(visit.Version, ENExceptionCodeType.E_ServiceUnavailable, "A valid Execute service was not found for the interface \"{0}\" and method \"{1}\"", request.Interface, request.OperationName); } if (isFlowProtected) { ValidateUserPermissions(nodeVisit, request.Interface, request.OperationName, NodeMethod.Execute, activity); } activity.AppendFormat("Execute request from {0} by {1}. ", visit.IP, nodeVisit.Account.NaasAccount); activity.AppendFormat("Service:{0} Parameters:{1}. ", request.OperationName, ParsingHelper.ToQualifiedString(request.Parameters)); // Load the service plugin IExecuteProcessor plugin; IPluginDisposer disposer; try { string flowName = FlowManager.GetDataFlowNameById(executeService.FlowId); disposer = PluginLoader.LoadExecuteProcessor(executeService, out plugin); } catch (Exception) { throw FaultProvider.GetFault(visit.Version, ENExceptionCodeType.E_ServiceUnavailable, "Failed to load the Execute service for the interface \"{0}\" and method \"{1}\"", request.Interface, request.OperationName); } ExecuteContentResultEx result = new ExecuteContentResultEx(); using (disposer) { transactionId = TransactionManager.CreateTransaction(NodeMethod.Execute, visit.Version, flowId, request.OperationName, nodeVisit.Account.Id, CommonTransactionStatusCode.Received, null, null, null, false); activity.TransactionId = transactionId; string requestId = RequestManager.CreateDataRequest(transactionId, executeService.Id, 0, -1, RequestType.Execute, nodeVisit.Account.Id, request.Parameters); try { ExecuteContentResult result2 = plugin.ProcessExecute(requestId); result.Content = result2.Content; result.Id = transactionId; result.Status = result2.Status; } finally { activity.Append(plugin.GetAuditLogEvents()); } } TransactionManager.SetTransactionStatus(transactionId, result.Status, string.Empty, false); NotificationManager.DoExecuteNotifications(result.Id, result.Status, flowId, request.Interface, nodeVisit.Account.NaasAccount, request.OperationName, request.Parameters); ExecuteProcessor.Wakeup(); return(result); } catch (Exception ex) { if (transactionId != null) { TransactionManager.SetTransactionStatusNoThrow(transactionId, CommonTransactionStatusCode.Failed, ex.Message, false); } if (activity != null) { activity.Append(ExceptionUtils.ToShortString(ex)); activity.Type = ActivityType.Error; } if (ex is SoapException) { throw; // Throw directly since already SoapException } else { throw FaultProvider.GetFault(visit.Version, ex); } } finally { if (activity != null) { ActivityManager.Log(activity); } } }