在控制台中运行webjob可以工作,但在Azure上引发异常:无法解析远程名称:“xxx.queue.core.windows.net”

在控制台中运行webjob可以工作,但在Azure上引发异常:无法解析远程名称:“xxx.queue.core.windows.net”,azure,azure-storage,azure-web-app-service,azure-storage-blobs,Azure,Azure Storage,Azure Web App Service,Azure Storage Blobs,My webjob从blob存储中删除文档。如果我将代码复制到一个控制台应用程序并运行它,它将运行到完成而不会出错。如果我在visual studio中右键单击我的网站项目并选择添加->新建Azure webjob项目,将代码复制到Functions.cs并部署,Azure在运行webjob时会引发异常: =============================================== [09/09/2016 01:51:44 > fc93a9: ERR ] Unhandl

My webjob从blob存储中删除文档。如果我将代码复制到一个控制台应用程序并运行它,它将运行到完成而不会出错。如果我在visual studio中右键单击我的网站项目并选择添加->新建Azure webjob项目,将代码复制到Functions.cs并部署,Azure在运行webjob时会引发异常:

===============================================

[09/09/2016 01:51:44 > fc93a9: ERR ] Unhandled Exception: Microsoft.WindowsAzure.Storage.StorageException: The remote name could not be resolved: 'xxx.queue.core.windows.net' ---> System.Net.WebException: The remote name could not be resolved: 'xxx.queue.core.windows.net'
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndGetResponse[T](IAsyncResult getResponseResult)
[09/09/2016 01:51:44 > fc93a9: ERR ]    --- End of inner exception stack trace ---
[09/09/2016 01:51:44 > fc93a9: ERR ]    at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndExecuteAsync[T](IAsyncResult result)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at Microsoft.WindowsAzure.Storage.Queue.CloudQueue.EndExists(IAsyncResult asyncResult)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass1`1.<CreateCallback>b__0(IAsyncResult ar)
[09/09/2016 01:51:44 > fc93a9: ERR ] --- End of stack trace from previous location where exception was thrown ---
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at Microsoft.Azure.WebJobs.Host.Queues.Listeners.QueueListener.<ExecuteAsync>d__4.MoveNext()
[09/09/2016 01:51:44 > fc93a9: ERR ] --- End of stack trace from previous location where exception was thrown ---
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at Microsoft.Azure.WebJobs.Host.Timers.TaskSeriesTimer.<RunAsync>d__d.MoveNext()
[09/09/2016 01:51:44 > fc93a9: ERR ] --- End of stack trace from previous location where exception was thrown ---
[09/09/2016 01:51:44 > fc93a9: ERR ]    at Microsoft.Azure.WebJobs.Host.Timers.BackgroundExceptionDispatcher.<>c__DisplayClass1.<Throw>b__0()
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
[09/09/2016 01:51:44 > fc93a9: ERR ]    at System.Threading.ThreadHelper.ThreadStart()
[09/09/2016 01:51:44 > fc93a9: SYS ERR ] Job failed due to exit code -532462766

=======================================================
这是作业中唯一一个使用存储的代码,其余的是数据库中用来获取列表的东西,等等

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("agentdocuments");

foreach (var doc in expiredDocs)
{
    if (doc.ContentLength == 1)
    {
        // Retrieve reference to blob
        CloudBlockBlob blockBlob = container.GetBlockBlobReference($"{doc.SubDomain.ToLower()}/{doc.ClientId}/{doc.FileId}");

        await blockBlob.DeleteIfExistsAsync();
    }
}
编辑:我还应该补充一点,这只是在更新之后才开始发生的:

Microsoft.Azure.WebJobs从1.1.1到1.1.2 Microsoft.Azure.WebJobs.Core从1.1.1到1.1.2 WindowsAzure。存储从5.0.2到7.2.0和 还有一些代码更改和其他更新,如Newtonsoft.Json、Microsoft.WindowsAzure.ConfigurationManager、Microsoft.Web.WebJobs.Publish,但我访问blob的方式没有代码更改


更新-我的网络作业在周末完成。它在22:23失败,错误与上面相同,但在22:24重试时成功运行。但今天再次失败,出现了同样的错误。我将尝试删除@FleminAdambukulam所述的日志记录,但奇怪的是,它在没有任何代码更改的情况下运行,然后再次失败……

问题是存储帐户属于只支持blob的特殊类型。即使您没有使用队列,WebJobs SDK也在内部依赖它们。因此,为了使用WebJobs SDK,您需要使用常规存储帐户。

问题是存储帐户属于只支持blob的特殊类型。即使您没有使用队列,WebJobs SDK也在内部依赖它们。因此,为了使用WebJobs SDK,您需要使用常规存储帐户。

听起来像是DNS解析问题。您可能希望通过尝试在存储帐户主机名上运行nslookup来尝试隔离。请检查存储帐户的冗余级别和帐户类型。我猜冗余类型是ZRS/Premium LRS,或者帐户类型是Blob存储而不是常规存储。@GauravMantri帐户类型是Blob存储。为什么会出现这样的问题?直到几天前,它一直运转良好。唯一的变化是对依赖项的一些更新。为什么它在webjob之外工作呢?Blob存储类帐户只支持Blob,而不支持队列、表和文件。我猜web jobs基础设施利用了幕后队列@davidebo可以更详细地说明代码在作为简单应用程序而不是web job运行时未使用的内容。哈。@davidebo在blob上的查找工作正常。我尝试了队列,但没有找到任何东西,因为我没有队列。GauravMantri认为webjobs在试图从作业访问blob时使用队列是正确的吗?听起来像是DNS解析问题。您可能希望通过尝试在存储帐户主机名上运行nslookup来尝试隔离。请检查存储帐户的冗余级别和帐户类型。我猜冗余类型是ZRS/Premium LRS,或者帐户类型是Blob存储而不是常规存储。@GauravMantri帐户类型是Blob存储。为什么会出现这样的问题?直到几天前,它一直运转良好。唯一的变化是对依赖项的一些更新。为什么它在webjob之外工作呢?Blob存储类帐户只支持Blob,而不支持队列、表和文件。我猜web jobs基础设施利用了幕后队列@davidebo可以更详细地说明代码在作为简单应用程序而不是web job运行时未使用的内容。哈。@davidebo在blob上的查找工作正常。我尝试了队列,但没有找到任何东西,因为我没有队列。GauravMantri认为webjobs在试图从作业访问blob时使用队列是正确的吗?FRACKIN FRACK!请原谅我的星际战士。。。。但是,生活在被称为“云”的神秘土地上的Azure诸神们是否有一些神奇的力量可以借给我,让我轻松地将我的blob复制到我将创建的新存储中,而不需要关闭我的网站来阻止上传新文档。我愿意牺牲多达3只山羊和一只羔羊!我知道你只是他们的仆人@davidebo,但我请求你,代表我和他们谈谈!你知道为什么它在5%的时间里仍然有效吗?我更倾向于WebJobs,所以不是存储专家。但我用来将blob从一个帐户复制到另一个帐户的工具是。不,我无法解释为什么这会起作用,对不起!弗拉金·弗拉克!请原谅我的星际战士。。。。但是,居住在被称为“云”的神秘土地上的Azure诸神们是否有某种神奇的力量可以借我轻松地将我的blob复制到我将要创建的新存储中,而不需要关闭我的站点来阻止新文档
正在上传。我愿意牺牲多达3只山羊和一只羔羊!我知道你只是他们的仆人@davidebo,但我请求你,代表我和他们谈谈!你知道为什么它在5%的时间里仍然有效吗?我更倾向于WebJobs,所以不是存储专家。但我用来将blob从一个帐户复制到另一个帐户的工具是。不,我无法解释为什么这会起作用,对不起!
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("agentdocuments");

foreach (var doc in expiredDocs)
{
    if (doc.ContentLength == 1)
    {
        // Retrieve reference to blob
        CloudBlockBlob blockBlob = container.GetBlockBlobReference($"{doc.SubDomain.ToLower()}/{doc.ClientId}/{doc.FileId}");

        await blockBlob.DeleteIfExistsAsync();
    }
}