2016-04-22 28 views
0

我有一个在本地服务器上运行的webjob(即不在Azure上托管)。它可以从队列中得很好的工作,并没有问题,处理它们,但我发现以下异常时处理完队列作业:404 webjob在Azure队列上完成处理作业时未发现异常

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.CloudBlob.<DeleteBlobImpl>b__29(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.CloudBlob.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.Executors.TriggeredFunctionExecutor`1.<TryExecuteAsync>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.QueueTriggerExecutor.<ExecuteAsync>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.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() 

的webjob运行我的开发机器上的罚款,并在另一台PC上,但在Windows 2012 R2服务器上获得例外。如果我将连接字符串更改为从不同的Azure帐户中的队列中读取,那么它可以正常工作,所以我想我的Azure主帐户上的设置有问题,但我不明白为什么它在运行时没有问题在其他机器上。

我目前使用Microsoft.Azure.WebJobs v1.1.0与WindowsAzure.Storage v7.0.0。使用WindowsAzure.Storage v5.0.2的Microsoft.Azure.WebJobs的v1.1.1获得了相同的结果。

我已按照问题Azure Web Job-The remote server returned 404中的建议进行操作,可以确认我已经设置了4个blob容器。

编辑 我更新了microsoft.azure.webjobs NuGet包到1.1.2,这似乎解决了上述问题,但2周开心地运行错误后突然出现重。没有代码更改或重新部署;正常工作的代码刚刚停止工作,并且据我所知,我们的Azure帐户没有任何更改。我已将配置文件更改为指向另一个Azure帐户,并且再次正常工作。

关于什么导致404的任何建议?

+0

你能分享一个代码吗? “更改设置”意味着只需更改连接或其他内容? –

+0

对不起,是的,更改设置意味着更改配置文件中的连接字符串,没有其他设置或代码被更改。我编辑了这个问题来澄清。 –

+0

你有没有解决这个问题? –

回答

0

未处理的异常:Microsoft.WindowsAzure.Storage.StorageException

这意味着你没有正确配置存储。 Web作业需要在app.config中设置两个appSettings AzureWebJobsDashboard,AzureWebJobsStorage

<add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=ACCOUNTNAME;AccountKey=ACCOUNTKEY" /> 
<add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=ACCOUNTNAME;AccountKey=ACCOUNTKEY" /> 

此外,该设置可能指向相同的Blob存储,Web作业将创建所需的文件夹并写入它们。

Webjob正在写日志和一些其他的东西,Blob存储,这就是为什么,因为它尝试将数据写入失败,但不能访问存储

+0

我在配置文件中都有这些设置,并且使用相同的设置,应用可以在其他机器上正常运行,所以我不认为这是配置问题。 –

0

我的Microsoft.Azure.WebJobs更新NuGet包新1.1.2版本,它现在似乎工作正常。

编辑 查看更新的问题。这个答案不再有效

相关问题