Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446

Падает веб-приложение с ошибкой "Задание не найдено"

28.05.2020, 19:25. Показов 3779. Ответов 38

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Стоит сервер Windows Server 2008 R2 Enterprise 64 OS 20 GB ozu. На нём веб-сервер IIS. На этом веб-сервере крутится asp.net приложение, которое выгружает из БД данные по запросу и загружает. До текущего месяца всё было нормально, но в этом месяце оно начало падать на определенном наборе данных (одном из самых больших) с ошибкой "Задание не найдено". Это сообщение валится вот из этого класса, из вот этого метода "GetTaskStatus":

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
<%@ WebService Language="c#" Class="AccountingCardManagementService" %>
 
[WebService(Namespace = "http://integro.ru/estate/")]
public class AccountingCardManagementService : Integro.InMeta.Web.WebService
{
    public const string AccountingCardTask = "AccountingCardTasks\\AccountingCardTasks.exe";
    public const string AcceptCardParameters = "Action=accept AppId={0} UserAccount={1} ProcessId={2}";
    public const string UnloadCardParameters = "Action=unload AppId={0} UserAccount={1} ComplexId={2} OutputDir=\"{3}\"";
    public const string UnloadCardsPath = "unloadcards";
 
    public AccountingCardManagementService()
    {
        Settings.Init(Session.Application);
    }
 
    [WebMethod]
    public string AcceptCard(string processId)
    {
        if ( !Security.CanExecute(new InMetaServerSession(Session), Operations.ВнесениеКартУчетаВБД) ) {
            throw new Exception("Нет прав на внесение карт учета в БД");
        }
        string parameters = string.Format(AcceptCardParameters,
            Session.Application.Id,
            Session.UserAccount,
            processId);
 
        return TaskProcessor.Start("AcceptAccountingCard", AccountingCardTask, parameters);
    }
 
    [WebMethod]
    public void DeleteProcess(string processId)
    {
        if(!Security.CanExecute(new InMetaServerSession(Session), Operations.УдалениеПроцессовПриемки)){
            throw new Exception("Нет прав на удаление процессов приемки");
        }
        DataObject process = Session["AccountingCard/AcceptanceProcess"].QueryObject("State", new DataId(processId));
        if ( process.GetInteger("State", 0) == 2 ) {
            throw new Exception("Процесс не может быть удален, так карта уже внесена в БД");
        }
        process.Delete();
        Session.Commit();
    }
 
    [WebMethod]
    public string UnloadCard(string complexId)
    {
        if ( !Security.CanExecute(new InMetaServerSession(Session), Operations.ВыгрузкаКартУчета) ) {
            throw new Exception("Нет прав на выгрузку карт учета");
        }
 
        if (!string.IsNullOrEmpty(complexId)) {
            InMetaServerSession session = new InMetaServerSession(Session);
 
            if (Settings.Customer == Customer.МЗИО) {
                //todo: исправить получение RegisteredSubject
                RegisteredSubject registeredSubject = session.Get<RegisteredSubject>(complexId);
                if (registeredSubject.IsTreasuryPropertyExists) {
                    if (registeredSubject.IsTreasury.HasValue && registeredSubject.IsTreasury.Value) {
                        if (!Security.CanExecute(new InMetaServerSession(Session), Operations.РедактированиеОбъектовКазны)) {
                            throw new Exception("Нет прав на выгрузку карт учета казны");
                        }
                    }
                    else {
                        if (!Security.CanExecute(new InMetaServerSession(Session), Operations.РедактированиеОбъектовРеестра)) {
                            throw new Exception("Нет прав на выгрузку карт учета реестра");
                        }
                    }
                }
            }
        }       
        
        string unloadCardPath = UnloadCardsPath;        
        string parameters = string.Format(UnloadCardParameters,
            Session.Application.Id,
            Session.UserAccount,
            complexId,
            Server.MapPath(unloadCardPath));
 
        return TaskProcessor.Start("UnloadAccountingCard", AccountingCardTask, parameters);
    }
 
    [WebMethod]
    public void DeleteUnloadProcess(string processId)
    {
        if ( !Security.CanExecute(new InMetaServerSession(Session), Operations.УдалениеПроцессовВыгрузки) ) {
            throw new Exception("Нет прав на удаление процессов выгрузки");
        }
        Session["AccountingCard/UnloadProcess"][processId].Delete();
        Session.Commit();
    }
 
    [WebMethod]
    public string ReportRegisteredObjects(string RegisterNo, string Name, string HolderRegisterNo, string HolderName, string HolderInn, string Region,
        string SubRgn, string Locality, string Street, string House, string Building, string Description, string Comment) {
 
        InMetaServerSession inmetaSession = new InMetaServerSession(Session);
        Org registrHostOrg = inmetaSession.Get<Org>(Settings.RegistrHostOrgId.ToString());
        RegisteredObjectSearch search = new RegisteredObjectSearch(inmetaSession);
        search.ActualDate = DateTime.Now;
        search.RegisterNo = RegisterNo;
        search.Name = Name;
        search.HolderRegisterNo = HolderRegisterNo;
        search.HolderName = HolderName;
        search.Region = Region;
        search.SubRgn = SubRgn;
        search.Locality = Locality;
        search.Street = Street;
        search.House = House;
        search.Building = Building;
        search.Description = Description;
        search.Comment = Comment;
 
        List<RegisteredObject> registeredObjects = search.Search();
 
        ExcelTable table = new ExcelTable();
        table.Styles.Add(ExcelStyle.Header);
 
        ExcelRow header = table.Rows.Add();
        header.Style = ExcelStyle.Header;
 
        header.Cells.Add("Вид");
        header.Cells.Add("Учетный номер");
        header.Cells.Add("Наименование");
        header.Cells.Add("Адрес");
        header.Cells.Add("Балансодержатель");
        header.Cells.Add("Реестровый номер балансодержателя");
        header.Cells.Add("Площадь");
        header.Cells.Add("Этажность");
        header.Cells.Add("Примечание");
        
        foreach ( RegisteredObject registeredObject in registeredObjects ) {
            ExcelRow row = table.Rows.Add();
            row.Cells.Add(registeredObject.Kind);
            row.Cells.Add(registeredObject.RegisterNo);
            row.Cells.Add(registeredObject.NameView);
            row.Cells.Add(registeredObject.Address);
            Law mainLaw = registeredObject.GetMainLaw(registrHostOrg, DateTime.Now, Settings.LawKindIds.PropertyLawKinds);
            RegisteredSubject balanceHolder = registeredObject.GetFirstBalanceHolder(mainLaw, DateTime.Now, Settings.LawKindIds.BalanceLawKinds);
            
            row.Cells.Add(InMetaObjectUtils.Assigned(balanceHolder)? balanceHolder.Name: "Казна");
            row.Cells.Add(InMetaObjectUtils.Assigned(balanceHolder) ? balanceHolder.RegisterNo : "Казна");
            row.Cells.Add(registeredObject.Area);
            row.Cells.Add(registeredObject.FloorCount);
            row.Cells.Add(registeredObject.Comment);
        }
 
        return table.ToXml();
    }
    
    private XmlDocument GenerateError(string errorMessage, string errorDetails)
    {
            XmlDocument doc = XmlUtils.CreateDocument("task");
            XmlElement taskElem = doc.DocumentElement;
            XmlUtils.SetChildText(taskElem, "state", "error");
            XmlUtils.SetChildText(taskElem, "errorMessage", errorMessage);
            XmlUtils.SetChildText(taskElem, "errorDetails", errorDetails);          
            return doc;
    }
 
    private XmlDocument GenerateProgress(string message, int progressCount, int progressPosition)
    {
            XmlDocument doc = XmlUtils.CreateDocument("task");
            XmlElement taskElem = doc.DocumentElement;
            XmlUtils.SetChildText(taskElem, "state", "running");
            XmlUtils.SetChildText(taskElem, "message", message);
            XmlUtils.SetChildText(taskElem, "progressCount", progressCount.ToString());
            XmlUtils.SetChildText(taskElem, "progressPosition", progressPosition.ToString());           
            return doc;
    }
 
    private XmlDocument GenerateComplete(string message)
    {
            XmlDocument doc = XmlUtils.CreateDocument("task");
            XmlElement taskElem = doc.DocumentElement;
            XmlUtils.SetChildText(taskElem, "state", "complete");
            XmlUtils.SetChildText(taskElem, "message", message);            
            return doc;      
    }
 
    [WebMethod]
    public XmlDocument GetTaskStatus(string taskId)
    {
        Task task = TaskProcessor.Find(taskId);
 
        if ( task == null ) {
            return GenerateError("Задание не найдено. taskId:"+taskId, null);
        }
 
        switch ( task.State ) {
            case TaskState.Running:
                string message = string.Empty;
                int progressCount = 0, progressPosition = 0;
                foreach ( TaskExecution execution in task.Executions ) {
                    message += "\r\n" + execution.Message;
                    progressCount = execution.ProgressCount;
                    progressPosition = execution.ProgressPosition;
                }
                return GenerateProgress(message, progressCount, progressPosition);
            case TaskState.Complete:
                TaskProcessor.Cancel(taskId);
                return GenerateComplete("Завершено");
            case TaskState.Error:
                TaskProcessor.Cancel(taskId);
                if ( task.Error is AccountingCardClasses.ApplicationException ) {
                    return GenerateError(task.Error.Message, null);
                }
                return GenerateError(task.Error.Message, task.Error.ToString());
            default:
                return GenerateError("Неизвестное состояние задания", null);
        }
    }
}
Прога написана лет 10 назад, исходников нет. taskId из метода GetTaskStatus - это 4-х значный номер, который при каждом запуске увеличивается на единицу. Но что это такое конкретно понять не могу.

Пробовал колдовать с IIS сервером, увеличивая количество потоков. Думал может быть из-за того что выгрузка большая и на сервер шлют запросы другие пользователи он прерывает процесс, а так будет одельный для этого запроса. Но это не помогло.

Подскажите, что это может быть и где что нужно посмотреть.
Миниатюры
Падает веб-приложение с ошибкой "Задание не найдено"  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.05.2020, 19:25
Ответы с готовыми решениями:

Битрикс падает с ошибкой БД
Всем здравия. С ростом количества сайтов в админке и их размерами битрикс начал падать с такой ошибкой Mysql connect error :...

Программа падает с ошибкой
Приветствую! Данный код падает при исполнении, отметил фейлящую строку пояснением: #include &lt;stdio.h&gt; #include...

Словарь падает с ошибкой
Здравствуйте, изучаю си и было дано задание: написать словарь, который будет сортировать элементы лексикографически (строки) и выводит их....

38
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
03.06.2020, 06:59  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Usaga Посмотреть сообщение
Вы на работе на калькуляторе работаете?) Или у вас база данных в терабайтах измеряеся?
База и приложение на серваке, работаем мы на клиентских машинах, а к серваку подрубаемся через рдпи. База весит не терабайты конечно, но больше 100 гб, поэтому скопировать её большая проблема

Добавлено через 2 минуты
Цитата Сообщение от Рядовой Посмотреть сообщение
так вы ж не для себя, а для работы. А у работы денег хватит.
какой там, бюджет даже на обновления серваков не выделяют, а они уже ой какие старенькие
0
Эксперт .NET
 Аватар для Usaga
14577 / 9481 / 1360
Регистрация: 21.01.2016
Сообщений: 35,771
03.06.2020, 07:02
Цитата Сообщение от Volodya_ Посмотреть сообщение
но больше 100 гб
База большая, но не настолько, чтобы не скопировать её. Тем более, если это для работы нужно. Бекапы же копируются. Может у админов где бекап есть. Он тоже пойдёт. Вам же не обязательно самый свежак, лишь бы схема базы была та же самая и всё.
0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
25.06.2020, 13:48  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
значит путь вам только один - декомпилировать всё приложение целиком и разобраться в той его части, что отвечает за получение задач. Как вариант, можно приложение под отладкой запустить (на своей машине, конечно же!) и посмотреть в живую как это всё работает.
И снова здравствуйте )

Вернулся снова к своей не решенной проблеме.
Скачал dotPeek, декомпилировал весь каталог с приложением. Проблема в том, что dotPeek не даёт мне полностью его экспортировать как проект. Если я выбираю отдельную декомпилированную dll (класс), то он мне предлагает экспортировать в проект VS, а если выбираю полностью каталог с приложением, который указывал для декомпиляции, то он отказывается его экспортировать как проект в VS.
Что-то не так наверное делаю?
Миниатюры
Падает веб-приложение с ошибкой "Задание не найдено"   Падает веб-приложение с ошибкой "Задание не найдено"  
0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
25.06.2020, 15:19  [ТС]
Цитата Сообщение от Рядовой Посмотреть сообщение
Это самописная библа, вот ее и надо декомпилировать
Отдельно данную библиотеку декомпилить получилось:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
using Integro.InMeta.Runtime;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Xml;
 
namespace TaskProcesses
{
  public class TaskProcessor : IDisposable
  {
    private FileStream m_indexFile;
    public readonly XmlDocument Document;
    private static string communicationFolder;
 
    public XmlElement Root
    {
      get
      {
        return this.Document.DocumentElement;
      }
    }
 
    private static string CommunicationFolder
    {
      get
      {
        if (TaskProcessor.communicationFolder == null)
          TaskProcessor.communicationFolder = Path.Combine(DataApplication.get_InMetaInstallPath(), "Tasks");
        return TaskProcessor.communicationFolder;
      }
    }
 
    private TaskProcessor(FileStream indexFile, XmlDocument document)
    {
      this.m_indexFile = indexFile;
      this.Document = document;
    }
 
    public void Dispose()
    {
      this.Close();
    }
 
    private void Close()
    {
      if (this.m_indexFile == null)
        return;
      this.m_indexFile.SetLength(0L);
      this.Document.Save((Stream) this.m_indexFile);
      this.m_indexFile.Close();
      this.m_indexFile = (FileStream) null;
    }
 
    private string GenerateNewTaskId()
    {
      string attribute = this.Root.GetAttribute("nextId");
      int num = string.IsNullOrEmpty(attribute) ? 1 : int.Parse(attribute);
      this.Root.SetAttribute("nextId", (num + 1).ToString());
      return num.ToString();
    }
 
    private string AddNewTask(string taskName)
    {
      string newTaskId = this.GenerateNewTaskId();
      XmlElement element = this.Document.CreateElement("task");
      this.SaveTask(element, new Task(taskName, newTaskId, TaskState.Running, DateTime.Now, new TaskExecution[0], (Exception) null));
      this.Root.AppendChild((XmlNode) element);
      return newTaskId;
    }
 
    private void SaveTask(XmlElement taskElement, Task task)
    {
      if (!string.IsNullOrEmpty(task.Name))
        taskElement.SetAttribute("name", task.Name);
      taskElement.SetAttribute("id", task.Id);
      taskElement.SetAttribute("state", task.State.ToString());
      taskElement.SetAttribute("lastUpdateTime", XmlConvert.ToString(task.LastUpdateTime, XmlDateTimeSerializationMode.Local));
      foreach (XmlElement selectNode in taskElement.SelectNodes("execution"))
        taskElement.RemoveChild((XmlNode) selectNode);
      foreach (TaskExecution execution in task.Executions)
      {
        XmlElement element = taskElement.OwnerDocument.CreateElement("execution");
        TaskProcessor.SaveExecution(element, execution);
        taskElement.AppendChild((XmlNode) element);
      }
      foreach (XmlElement selectNode in taskElement.SelectNodes("error"))
        taskElement.RemoveChild((XmlNode) selectNode);
      if (task.Error == null)
        return;
      XmlElement element1 = taskElement.OwnerDocument.CreateElement("error");
      this.SaveError(element1, task.Error);
      taskElement.AppendChild((XmlNode) element1);
    }
 
    private void SaveError(XmlElement element, Exception error)
    {
      XmlElement element1 = element.OwnerDocument.CreateElement("message");
      element1.InnerText = error.Message;
      element.AppendChild((XmlNode) element1);
      XmlElement element2 = element.OwnerDocument.CreateElement("details");
      element2.InnerText = error.ToString();
      element.AppendChild((XmlNode) element2);
      string str = (string) null;
      try
      {
        str = Utils.Serialize((object) error);
      }
      catch (Exception ex)
      {
        XmlElement element3 = element.OwnerDocument.CreateElement("serializationError");
        element3.InnerText = ex.ToString();
        element.AppendChild((XmlNode) element3);
      }
      if (string.IsNullOrEmpty(str))
        return;
      XmlElement element4 = element.OwnerDocument.CreateElement("data");
      element4.InnerText = str;
      element.AppendChild((XmlNode) element4);
    }
 
    private static void SaveExecution(XmlElement element, TaskExecution execution)
    {
      element.SetAttribute("message", execution.Message);
      element.SetAttribute("progressCount", execution.ProgressCount.ToString());
      element.SetAttribute("progressPosition", execution.ProgressPosition.ToString());
    }
 
    public void RemoveTask(string taskId)
    {
      XmlNode oldChild = this.Root.SelectSingleNode("task[@id='" + taskId + "']");
      if (oldChild == null)
        return;
      this.Root.RemoveChild(oldChild);
    }
 
    public static bool UpdateTask(Task task)
    {
      using (TaskProcessor taskProcessor = TaskProcessor.Open())
      {
        XmlElement taskElement = (XmlElement) taskProcessor.Root.SelectSingleNode("task[@id='" + task.Id + "']");
        if (taskElement == null)
          return false;
        taskProcessor.SaveTask(taskElement, task);
        return true;
      }
    }
 
    private static TaskProcessor Open()
    {
      string path = Path.Combine(TaskProcessor.CommunicationFolder, "tasks.xml");
      DateTime dateTime = DateTime.Now + TimeSpan.FromSeconds(1.0);
      FileStream indexFile = (FileStream) null;
      do
      {
        try
        {
          indexFile = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
        }
        catch
        {
          if (DateTime.Now > dateTime)
            throw;
          else
            Thread.Sleep(1);
        }
      }
      while (indexFile == null);
      try
      {
        XmlDocument document = new XmlDocument();
        if (indexFile.Length == 0L)
        {
          document.AppendChild((XmlNode) document.CreateElement("tasks"));
        }
        else
        {
          document.Load((Stream) indexFile);
          foreach (XmlElement selectNode in document.DocumentElement.SelectNodes("task"))
          {
            if (DateTime.Now - XmlConvert.ToDateTime(selectNode.GetAttribute("lastUpdateTime"), XmlDateTimeSerializationMode.Local) > TimeSpan.FromDays(1.0))
              document.DocumentElement.RemoveChild((XmlNode) selectNode);
          }
        }
        return new TaskProcessor(indexFile, document);
      }
      catch
      {
        indexFile.Close();
        throw;
      }
    }
 
    public static Task[] GetAll()
    {
      List<Task> taskList = new List<Task>();
      using (TaskProcessor taskProcessor = TaskProcessor.Open())
      {
        foreach (XmlElement selectNode in taskProcessor.Root.SelectNodes("task"))
          taskList.Add(TaskProcessor.LoadTask(selectNode));
      }
      return taskList.ToArray();
    }
 
    private static Task LoadTask(XmlElement element)
    {
      List<TaskExecution> taskExecutionList = new List<TaskExecution>();
      foreach (XmlElement selectNode in element.SelectNodes("execution"))
        taskExecutionList.Add(TaskProcessor.LoadExecution(selectNode));
      TaskState state = (TaskState) Enum.Parse(typeof (TaskState), element.GetAttribute("state"), true);
      string attribute1 = element.GetAttribute("name");
      string attribute2 = element.GetAttribute("id");
      DateTime dateTime = XmlConvert.ToDateTime(element.GetAttribute("lastUpdateTime"), XmlDateTimeSerializationMode.Local);
      XmlElement errorElement = (XmlElement) element.SelectSingleNode("error");
      Exception error = (Exception) null;
      if (errorElement != null)
        error = TaskProcessor.LoadError(errorElement);
      return new Task(attribute1, attribute2, state, dateTime, taskExecutionList.ToArray(), error);
    }
 
    private static Exception LoadError(XmlElement errorElement)
    {
      XmlNode xmlNode = errorElement.SelectSingleNode("data");
      if (xmlNode != null)
      {
        try
        {
          return (Exception) Utils.Deserialize(xmlNode.InnerText);
        }
        catch
        {
        }
      }
      return (Exception) new TaskException(errorElement.SelectSingleNode("message").InnerText, errorElement.SelectSingleNode("details").InnerText);
    }
 
    private static TaskExecution LoadExecution(XmlElement element)
    {
      return new TaskExecution(element.GetAttribute("message"), XmlConvert.ToInt32(element.GetAttribute("progressCount")), XmlConvert.ToInt32(element.GetAttribute("progressPosition")));
    }
 
    public static string Start(string taskName, string filename, string parameters)
    {
      string str;
      using (TaskProcessor taskProcessor = TaskProcessor.Open())
        str = taskProcessor.AddNewTask(taskName);
      Process.Start(Path.Combine(Path.Combine(TaskProcessor.CommunicationFolder, "Bin"), filename), parameters + " TaskId=" + str);
      return str;
    }
 
    public static string StartAndWait(string taskName, string filename, string parameters)
    {
      string str;
      using (TaskProcessor taskProcessor = TaskProcessor.Open())
        str = taskProcessor.AddNewTask(taskName);
      Process.Start(Path.Combine(Path.Combine(TaskProcessor.CommunicationFolder, "Bin"), filename), parameters + " TaskId=" + str).WaitForExit();
      return str;
    }
 
    public static string Start(string filename, string parameters)
    {
      return TaskProcessor.Start((string) null, filename, parameters);
    }
 
    public static void Cancel(string taskId)
    {
      using (TaskProcessor taskProcessor = TaskProcessor.Open())
        taskProcessor.RemoveTask(taskId);
    }
 
    public static Task Find(string taskId)
    {
      foreach (Task task in TaskProcessor.GetAll())
      {
        if (task.Id == taskId)
          return task;
      }
      return (Task) null;
    }
 
    public static Task[] FindRunning(string taskName)
    {
      List<Task> taskList = new List<Task>();
      foreach (Task task in TaskProcessor.GetAll())
      {
        if (task.Name == taskName && task.State == TaskState.Running)
          taskList.Add(task);
      }
      return taskList.ToArray();
    }
  }
}
Нашел файл из которого этот "taskId" берется. Это "tasks.xml", который содержит следующие записи:
XML
1
2
<?xml version="1.0"?>
<tasks nextId="8933"> </tasks>
А на дублере сервера с таким же приложением, данный файл выглядит по другому:
XML
1
2
3
<?xml version="1.0"?>
-<tasks nextId="7067"> <task lastUpdateTime="2020-06-23T13:39:13.2036224+05:00" state="Running" id="7064" name="UnloadAccountingCard"/>
<task lastUpdateTime="2020-06-23T13:40:36.5338309+05:00" state="Running" id="7065" name="UnloadAccountingCard"/> </tasks>
Но не понимаю, что этот tasks означает и что с ним может быть не так?
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
25.06.2020, 16:18
Volodya_, это и предстоит вам выяснить. Да, поддерживать легаси код - это боль, страдания и унижение.
Странно это спрашивать на форуме, мы ведь даже не знаем чем занимается ваша контора...
0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
25.06.2020, 17:13  [ТС]
Рядовой, после того как удалил этот xml-файл и запустил сервис, он мне сознал новый файл следующего содержания
XML
1
2
<?xml version="1.0"?>
<tasks nextId="2"> </tasks>
но в процессе выполнения там была ещё 1-а стр по типу "<task lastUpdateTime="2020-06-23T13:40:36.5338309+05:00" state="Running" id="7065" name="Формирование файла"/> </tasks>", которая удалилась
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
25.06.2020, 17:56
Volodya_, ну так проблема очевидна. В момент когда надо удалить таск он не находится. Может быть он не записался, или уже был удален.
Ставьте брейкпоинты, ищите место где вызывается удаление, потом ищите, почему этого айдишника не нашлось в файлике.
1
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
25.06.2020, 20:40  [ТС]
Цитата Сообщение от Рядовой Посмотреть сообщение
В момент когда надо удалить таск он не находится.
А как вы определили, что именно в момент когда нужно удалить task?

Цитата Сообщение от Рядовой Посмотреть сообщение
Ставьте брейкпоинты, ищите место где вызывается удаление, потом ищите, почему этого айдишника не нашлось в файлике.
Для этого нужно декомпилировать весь проект, а тут проблема - декомпилировать отдельную dll получается, а декомпилировать весь проект целиком не выходит ( https://www.cyberforum.ru/post14680622.html

Наверное что-то делаю не так?
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
25.06.2020, 21:36
Лучший ответ Сообщение было отмечено Volodya_ как решение

Решение

Volodya_, предположил, раз они пропадают из файла.
0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
31.08.2020, 12:30  [ТС]
Дело было в данных, в поле одного из объектов каким-то образом попал непонятный непечатаемый символ. Выяснить это получилось только после того, как разработчик согласился запустить у себя исходник утилиты в режиме отладки на наших данных.
0
Эксперт .NET
 Аватар для Usaga
14577 / 9481 / 1360
Регистрация: 21.01.2016
Сообщений: 35,771
31.08.2020, 13:49
Volodya_, три месяца ушло... Дешевле было сразу к разработчику обратиться)

Он при вас код смотрел?
0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
31.08.2020, 14:08  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Он при вас код смотрел?
Нет, у себя, передавали backup бд. Потом прислали скрин из отладчика и id-объекта, посмотрел этот объект - символ этот даже не виден был. Перебил это поле и утилита заработала

Добавлено через 2 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
три месяца ушло... Дешевле было сразу к разработчику обратиться)
Проблема в том, что договора то нет
0
Эксперт .NET
 Аватар для Usaga
14577 / 9481 / 1360
Регистрация: 21.01.2016
Сообщений: 35,771
31.08.2020, 14:11
Volodya_, я это к тому, что если бы я три месяца бился над проблемой, то мне было бы дичайше интересно посмотреть, как её профессионал решил. Особенно, когда вопрос в том, чтобы посмотреть под отладкой на данные)
0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
31.08.2020, 14:31  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
я это к тому, что если бы я три месяца бился над проблемой, то мне было бы дичайше интересно посмотреть, как её профессионал решил. Особенно, когда вопрос в том, чтобы посмотреть под отладкой на данные)
Первым запуском определяется строка кода, в которой возникает исключение - уже известна строка и данные, которые она обрабатывает. Далее можно прописать запись в файл данных объекта перед выполнением данной строки, чтобы объект на котором возникает исключение прежде был записан в файл, делаем очистку файла после проблемной строки кода, чтобы не расходовать лишнею память и запускаем отладку второй раз. Соответственно объект, который окажется в файле и будет проблемным. Я бы сделал так. Но возможно это не совсем верно, но мне кажется это бы сработало )
0
 Аватар для sau
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
31.08.2020, 18:38
Volodya_, в каком городе работа ? - вам явно нужен тимлид в моем лице ). , я из тех динозавров , кто еще помнит веб.формы и soap сервисы ).

А по поводу левых символов в файле и отсутствий записей - судя по всему , работа с файлом идет из под веб.сервиса , т.е многопоточный доступ , а синхронизации на доступ к файлу я в ваших примерах не заметил , возможно ее вообще нет , тогда немудрено получить разные артефакты. - по хорошему эти данные так же в нормальной БД нужно хранить, а не в файле.
0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
31.08.2020, 19:54  [ТС]
Цитата Сообщение от sau Посмотреть сообщение
в каком городе работа ? - вам явно нужен тимлид в моем лице ). , я из тех динозавров , кто еще помнит веб.формы и soap сервисы ).
Оренбург, но это бюджетная организация, вас наверняка не устроит уровень з/п )
0
31.08.2020, 20:02

Не по теме:

Volodya_, а вас там что держит?

0
15 / 13 / 3
Регистрация: 20.02.2018
Сообщений: 446
31.08.2020, 20:10  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Volodya_, а вас там что держит?
Отсутствие опыта, и ещё учусь
0
31.08.2020, 20:11

Не по теме:

Volodya_, чем раньше вы оттуда навалите, тем быстрее начнёте получать опыт.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.08.2020, 20:11

Программа падает с ошибкой
Доброго времени суток уважаемые форумчане. Возникла не большая проблема... Задание достаточно тривиальное. Пользователь задает...

Функция CryptUnprotectData падает с ошибкой 13
Здравствуйте, форумчане! Столкнулась с такой проблемой: фунция падает с ошибкой с кодом 13. Как решить эту проблему??? int iRet=0; ...

Программа падает с ошибкой о переполнении оперативки
Написана вот такая функция которая отрисовывает меню при запуске программы, проблема в том, что не могу ее встроить в функцию main...

Приложение не найдено!
Здравствуйте! возникла такая проблема... Телефон Sony, Android 5.0.2, недавно начал пользоваться флэшкой и скинул на нее большую часть...

VLClib - спустя час программа падает с ошибкой
Имеется проект WPF С# NET 4/0. Разработка ведется под Win 7 x64 VS2012. После запуска на Win XP (x86) падает спустя час полтора. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru