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