Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
        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);
                }
            }
        }