Esempio n. 1
0
        /// <summary>
        /// Permette il trasferimento dei dati relativi al task da elaborare ed imposta una stringa contenente
        /// l'identificativo univoco associato alla richiesta di elaborazione, necessario per ottenere in seguito
        /// i risultati dell'elaborazione.
        /// </summary>
        /// <param name="data">i dati relativi al task di cui si richiede l'elaborazione</param>
        /// <param name="id">l'identificativo associato alla richiesta di elaborazione</param>
        public void SubmitData(TaskData data, out string id)
        {
            m_Container.WriteToLog("SubmitData: receiving data, name = {0}.", data.Name);

            ServiceFault fault = null;

            // Genera un ID univoco da associare alla richiesta.
            string taskRequestId;

            if (!m_Container.TryGetRandomId(out taskRequestId, out fault))
            {
                throw new FaultException <ServiceFault>(fault);
            }

            m_Container.WriteToLog("SubmitData: task request id = {0}.", taskRequestId);

            string tdFilePath = m_Container.GetTaskDataFilePath();   // task data file path

            // Salva i dati ricevuti sul task da elaborare.
            if (!m_Container.TrySaveDataToFile(data.Contents, tdFilePath, out fault))
            {
                throw new FaultException <ServiceFault>(fault);
            }

            m_Container.WriteToLog("SubmitData: task request id = {0}, file saved to {1}.", taskRequestId, tdFilePath);

            // Verifica che la risorsa sia disponibile.
            string className, classVersion;

            if (!m_Container.TrySearchResource(tdFilePath, out className, out classVersion, out fault))
            {
                throw new FaultException <ServiceFault>(fault);
            }

            string trFilePath = m_Container.GetTaskResultsFilePath(); // task results file path

            // Prepara il task da elaborare.
            TaskMetadata tm = new TaskMetadata(className, classVersion, tdFilePath, trFilePath);

            tm.UpdateOnReady(DateTime.Now);

            // Inserisce il task in coda allo scheduler.
            if (!m_Container.TryQueueTask(tm, taskRequestId, out fault))
            {
                throw new FaultException <ServiceFault>(fault);
            }

            m_Container.WriteToLog("SubmitData: task scheduled with request id = {0}, target file = {1}.",
                                   taskRequestId, trFilePath);

            id = taskRequestId;
        }