2015-09-24 6 views
3

У меня есть работающий по сети веб-сайт, который слушает очередь start и остановку queue со своими соответствующими функциями. В веб-задании есть 3 предопределенных процесса, а в очереди start содержится сообщение, в котором упоминается имя процесса, которое должно быть запущено, в то время как очередь stop содержит сообщение, в котором упоминается имя процесса, которое необходимо остановить.Azure Web Job - удаленный сервер вернулся 404

Когда-либо веб-сайт останавливает процесс, он сбрасывается и перезапускается с вышеуказанным исключением за последние 4 недели.

Executing: 'Functions.StartProcess' because New queue message detected on 'start'. 
Updated the status of Process A to 1 
Process A Started 
Process A processed 200 records 
Process A processed 200 records 
Process A processed 200 records 
Process A processed 200 records 
Process A processed 200 records 
Executing: 'Functions.StopProcess' because New queue message detected on 'stop'. 
Process A stopped 
Disposed Process A 
Updated the status of Process A to 3 

Unhandled Exception: Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (404) Not Found. ---> System.Net.WebException: The remote server returned an error: (404) Not Found. 
    at Microsoft.WindowsAzure.Storage.Shared.Protocol.HttpResponseParsers.ProcessExpectedStatusCodeNoException[T](HttpStatusCode expectedStatusCode, HttpStatusCode actualStatusCode, T retVal, StorageCommandBase`1 cmd, Exception ex) 
    at Microsoft.WindowsAzure.Storage.Blob.CloudBlobSharedImpl.<DeleteBlobImpl>b__1b(RESTCommand`1 cmd, HttpWebResponse resp, Exception ex, OperationContext ctx) 
    at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndGetResponse[T](IAsyncResult getResponseResult) 
    --- End of inner exception stack trace --- 
    at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndExecuteAsync[T](IAsyncResult result) 
    at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.EndDelete(IAsyncResult asyncResult) 
    at Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass4.<CreateCallbackVoid>b__3(IAsyncResult ar) 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.Azure.WebJobs.Host.Protocols.PersistentQueueWriter`1.<DeleteAsync>d__6.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.Azure.WebJobs.Host.Loggers.CompositeFunctionInstanceLogger.<DeleteLogFunctionStartedAsync>d__e.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.<TryExecuteAsync>d__1.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.Azure.WebJobs.Host.Queues.Listeners.QueueTriggerExecutor.<ExecuteAsync>d__0.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at Microsoft.Azure.WebJobs.Host.Queues.Listeners.QueueListener.<ProcessMessageAsync>d__11.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
    at Microsoft.Azure.WebJobs.Host.Timers.BackgroundExceptionDispatcher.<>c__DisplayClass1.<Throw>b__0() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

Веб-сайт даже не содержит кода для удаления файла blob.

В процессе отладки отладчик не указывает на какую-либо конкретную строку, выбрасывая исключение, и, следовательно, я не имею в виду, что является фактической причиной.

PS: Раньше он работал отлично до этого, и тело каждой функции заключено в блок catch try. Блок catch не отменяет исключение, а просто регистрирует стек и продолжает.

EDIT

я должен был проверить, если ниже контейнеры были там

enter image description here

при хранении в webjob и также обновленный пакет Microsoft.Web.WebJobs.Publish NuGet. Я действительно не уверен, что это исправляет проблему наверняка, хотя.

+0

Можете ли вы проверить имя контейнера для нечеткой капли? – lopezbertoni

+0

У меня нет контейнера, и я ничего не пытаюсь удалить.Я не знаю, что пытается удалить веб-работа. У меня нет никаких триггеров blob. У хранилища есть контейнеры по умолчанию, которые создаются лазурным webjob sdk – Sandesh

ответ

6

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

Когда я попробовал это изначально, сначала я опубликовал его, и он работал как шарм. Второй проект, я делаю это по-другому, так что я побежал консольное приложение первое, и он держал неудачу с 404.

Итак, вам нужно создать:

  • лазурь-webjobs-приборной панель
  • лазури -webjobs-хосты
  • лазурной-вакансия-хосты-архив
  • лазурных-вакансия-хосты-вывод

Надеются, что это поможет кому-то.

+0

Я бы добавил .. если вы хотите сделать это в C# CloudStorageAccount storageAccount = ...; CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); // контейнер для этого является companystyles blobClient.GetContainerReference ("azure-webjobs-dashboard"). CreateIfNotExists(); blobClient.GetContainerReference ("azure-webjobs-hosts"). CreateIfNotExists(); blobClient.GetContainerReference ("azure-jobs-hosts-archive"). CreateIfNotExists(); blobClient.GetContainerReference ("azure-jobs-hosts-output"). CreateIfNotExists(); – Nordes

0

У меня была такая же ошибка.

То, что сработало для меня был обновлением WindowsAzure.Storage пакета в моем случае от 4.3.0 к 7.1.2, но я бы с последней или любым вашими другими WebJobs использует (если они работают без проблем).