2016-09-12 3 views
0

Итак, я создал Azure Web Job, который выполняет определенную задачу каждые 15 минут. Он запускает консольное приложение C#. Проблема в том, что при моей последней загрузке моей программы я оставил свой аргумент Console.ReadLine();, в результате чего программа никогда не заканчивалась (используется для локальной отладки, конечно), а веб-задание терпит неудачу и никогда не запускается снова. Очевидно, что это может быть исправлено очень быстро, если бы у меня был исходный код, но исходный код у меня в офисе, и я забыл загрузить его в облачное хранилище. Я не буду иметь доступ к нему, пока немного позже на этой неделе.Ошибка работы Azure Web Jobs - ReadLine() слева от

Так что я ищу быстрое исправление. Я могу загрузить программу .exe, которая была загружена в последний раз. Итак, теперь я собираюсь сначала запустить другую программу, которая вызывает мою основную программу, а затем закрывает ее через определенное время. Я попробовал простой скрипт .bat, который смог успешно открыть программу, но не смог закрыть/убить процесс из-за отказа в доступе к ошибкам (работал локально). Любые другие быстрые предложения, которые будут работать в среде веб-работы?

Очевидно, что если вы видите это здесь через несколько дней, я, вероятно, уже внес коррективы в исходный код в корень проблемы, но другие могут быть заинтересованы. :)

UPDATE:

Спасибо всем! Каждое из этих решений помогло мне запустить мою веб-работу по назначению. Декомпиляция с использованием Reflector была особенно полезна, так что я могу добавить этот проект в облако, как это должно быть. Однако использование run.cmd, предложенное @evilSnobu, было самым простым и простейшим способом применения обходного пути по запросу в моем вопросе.

Снова спасибо!)

P.S. Я переключился с Console.ReadLine(); до System.Threading.Thread.Sleep();, чтобы предотвратить любые будущие неудачи.

+1

Можете ли вы декомпилировать исполняемый файл, чтобы получить исходный код и перекомпилировать без оскорбительной строки, пока вы не сможете вернуться в свой офис? –

+0

Всегда интересовался этим, получил предложение для декомпиляционного инструмента? – Gerneio

+1

Еще в тот же день, Reflector.NET был выход, но вы могли бы получить то, что вам нужно от ILSpy: http://ilspy.net/ –

ответ

2
public class Program 
    { 
     public static void Main() 
     { 
      Console.WriteLine("Hello World!"); 
      Console.ReadLine(); 
      Console.WriteLine("After ReadLine"); 
     } 
    } 

Попробуйте запустить свой Webjob, как echo '\n' | helloconsole.exe

Тестирование в Куду:

D:\home\tmp>echo '\n' | helloconsole.exe 
Hello World! 
After ReadLine 

D:\home\tmp>echo '\n' | helloconsole.exe 
Hello World! 
After ReadLine 

..seems, чтобы вытащить его.

Если вы уронили это в run.cmd, он будет иметь приоритет над вашим двоичным кодом .exe. https://github.com/projectkudu/kudu/wiki/Web-jobs

Мы используем следующую логику, чтобы решить, какой файл сценарий для запуска в каталоге Иова:

  • Per типа файла мы рассмотрим первый файл с именем: run.{file type extension} (например, бега. cmd или run.exe).
+1

О, это хорошее решение, которое не требует насилия! :) –

+0

+1 еще не пробовал, но это выглядит многообещающе! Я на самом деле только что нашел свои собственные ответы, прежде чем вы отправили два сообщения (ссылка в комментарии другого сообщения). Спасибо за подсказку на части run.cmd! Моим быстрым и «грязным» решением для этого было просто поместить его в подкаталог. :) – Gerneio

1

Попробуйте следующую команду, чтобы убить процесс:

d:\devtools\sysinternals\pskill /accepteula YourProcessName 

Вы можете практиковать это работает в Kudu Console первой.

+0

Спасибо за ответ! Я просто нашел решение, выполнив ответ в [этот пост] (http://stackoverflow.com/a/451986). Хорошо работает. Я тоже проверю твою. – Gerneio

+0

Вместо этого попробуйте использовать решение @ evilSnobu, которое позволяет избежать необходимости вообще убивать процесс. –

+0

Извините, что уклонился, но Дэвид посмотрел на это? http://serverfault.com/questions/802603/daemon-listening-on-a-port-make-port-accessible-from-network-requests-on-azure Я не уверен, что Azure devrels выходят на улицу Serverfault – CQM

Смежные вопросы