我试图发布我的网站以及一些WebJobs,但在Azure网站上创建网站和作业后,我看到VS.NET 2013上的一个错误:
Error 948 An error occurred while creating the WebJob schedule: No website could be found which matches the WebSiteName [mysitename] and WebSiteUrl [http://mysitename.azurewebsites.net] supplied
Run Code Online (Sandbox Code Playgroud)
我的网站有2个WebJobs,1个连续运行并且已经创建并运行,但需要按计划触发的那个就是这个问题.
关于这里可能出错的任何想法?
编辑1
只想添加计划作业创建为"按需"
这是我正在使用的发布设置:
{
"$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
"webJobName": "ArchiveShipments",
"startTime": "2015-01-11T00:00:00+05:30",
"endTime": null,
"jobRecurrenceFrequency": "Day",
"interval": 1,
"runMode": "Scheduled"
}
Run Code Online (Sandbox Code Playgroud)
我应用AzureSDK后BTW.2.5我发布时没有看到任何错误,但是没有创建预定的WebJob.
我使用.NET Framework 4.6在Visual Studio 2015中创建了一个新的Azure WebJob项目.
在app.config中,我设置了三个连接字符串:
AzureWebJobsDashboard和AzureWebJobsStorage连接字符串是相同的,它们都指向我的存储帐户.我包含了一个连接字符串 - 因为它们都是相同的,除了"名称".
<add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=mystorageaccountname;AccountKey=thisIsTheLongPrimaryKeyICopiedFromAzurePortalForMyStorageAccount" />
Run Code Online (Sandbox Code Playgroud)
一切看起来都对我,但我收到以下错误:
未正确设置Microsoft Azure WebJobs仪表板的配置.在Microsoft Azure网站配置中,必须使用以下格式设置名为AzureWebJobsDashboard的连接字符串:DefaultEndpointsProtocol = https; AccountName = NAME; AccountKey = KEY指向存储Microsoft Azure WebJobs运行时日志的Microsoft Azure存储帐户.
顺便说一下,我知道web作业正在读取app.config,因为我的代码能够连接到我的数据库并更新一些记录.
知道我做错了什么吗?
我通过右键单击我的WebApp项目并添加一个新的Azure Web项目来创建一个计划的Azure WebJob.我在WebJob项目的App.config中设置了AzureWebJobsDashboard和AzureWebJobsStorage连接字符串.我现在单独留下.cs文件中的默认代码.接下来,我从Visual Studio(顺便提一下2013 Update 4)发布到Azure网站.它创建了WebJob,我可以从Azure管理站点或Visual Studio运行它,并且它是成功的.我可以看到我期望它们的输出日志.但是,Azure WebJob详细信息页面显示以下警告/错误:
确保使用以下格式在Microsoft Azure网站配置中设置名为AzureWebJobsDashboard的连接字符串:DefaultEndpointsProtocol = https; AccountName = NAME; AccountKey = KEY指向存储Microsoft Azure WebJobs运行时日志的Microsoft Azure存储帐户.
未正确设置Microsoft Azure WebJobs仪表板的配置.在Microsoft Azure网站配置中,必须使用以下格式设置名为AzureWebJobsDashboard的连接字符串:DefaultEndpointsProtocol = https; AccountName = NAME; AccountKey = KEY指向存储Microsoft Azure WebJobs运行时日志的Microsoft Azure存储帐户.
它还提供了一个链接,是http://azure.microsoft.com/blog/2013/07/17/windows-azure-web-sites-how-application-strings-and-connection-strings-work/其没有按解释为什么我收到错误消息.
现在,为了消除此警告/错误,我将在Azure管理站点的配置页面中添加相同的AzureWebJobsDashboard连接字符串.
所以,我试图弄清楚我是否做错了什么,或者这只是微软尚未解决的WebJobs中的一个问题.我真的希望能够在App.config中拥有它,而不必记住在我们为不同环境生成的每个网站中设置它.
非常感谢您的时间和帮助.
我正在尝试使用Azure WebJob从Azure ServiceBus队列中读取消息,但它正在抛出异常:
Unhandled Exception: System.InvalidOperationException: Found 2 DNS claims in authorization context.
Run Code Online (Sandbox Code Playgroud)
我已经设置了名为"AzureWebJobsServiceBus","AzureWebJobsDashboard"和"AzureWebJobsStorage"的正确连接字符串
WebJob程序代码已更新为使用JobHostConfiguration:
class Program
{
static void Main()
{
var config = new JobHostConfiguration();
config.UseServiceBus();
var host = new JobHost(config);
host.RunAndBlock();
}
}
Run Code Online (Sandbox Code Playgroud)
而实际的Job方法
public class Functions
{
public async static Task ServiceBusResizeRequest(
[ServiceBusTrigger("blah")] string message,
TextWriter log
)
{
await log.WriteLineAsync("got message " + message);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过单独的控制台应用程序成功创建和写入队列.
但是当我运行webjob应用程序时,它会抛出异常.
有任何想法吗?
编辑:使用.net 4.6.1
azure azureservicebus azure-servicebus-queues azure-webjobs azure-webjobssdk
我创建了一个按需webjob.在管理门户中,没有上传新zip的选项来更新它.
我可以删除现有的webjob并创建一个新的webjob,但我想保留我的日志.
有没有办法重新部署它,覆盖旧版本,维护日志?
我想知道Azure WebJobs SDK是否可以触发异步方法?目前我有一个如下所示的方法:
class Program
{
static void Main(string[] args)
{
var host = new JobHost();
host.RunAndBlock();
}
public static void ProcessStuff([QueueInput("myqueue")] string msg)
{
var tsk = ProcessStuffAsync(msg)
.ContinueWith(x => HandleAsyncError(x),
TaskContinuationOptions.OnlyOnFaulted);
tsk.Wait();
}
public static async Task ProcessStuffAsync(string msg)
{
// do some async stuff and await it
}
// other methods ...
}
Run Code Online (Sandbox Code Playgroud)
但是,我想知道我是否可以让JobHost知道调用我的异步方法呢?尝试在WebJobs中使用async/await时,没有大量的文档,如果可以的话,它会非常好.
我正在尝试在本地运行此测试...但WebJobs SDK不支持本地存储模拟器...
更新2014年4月7日:Victor的答案是正确的,但我确实想要展示你在WebJob中使用异步方法会看到什么(他们确实有效).
对于WebJob中的方法,如下所示:
public async static Task ProcessMessageAsync([QueueInput("testq2")] string message)
{
await Task.Delay(50);
Console.WriteLine("Processing Message Async...");
Console.WriteLine(message);
}
Run Code Online (Sandbox Code Playgroud)
您将在WebJobs日志中看到以下输出:
running in pid: …
Run Code Online (Sandbox Code Playgroud) 在编写C#函数时,Azure函数之间ICollector<T>
和之间的区别是什么IAsyncCollector<T>
(也适用于WebJobs)?
我从样本中了解到这些是我可以用来将函数参数绑定到输出绑定的接口.我也理解这两个接口相应地具有非异步和异步方法签名(即ICollector<T>.Add(item)
和IAsyncCollector<T>.AddAsync(item)
).但他们在封面下做了什么?它们实际上是将数据发布到输出绑定,还是在函数执行结束时进行内部缓冲和刷新(在这种情况下,为什么会有AddAsync
方法)?
我正在尝试使用Azure Webjobs,我理解它的工作方式,但我不明白为什么我需要使用两个连接字符串,一个是用于保存消息的队列但是
为什么还有一个名为"AzureWebJobsDashboard"的?
它的目的是什么?
我从哪里得到这个连接字符串?
目前我在同一个解决方案中有一个Web应用程序和一个Webjob,我只在本地进行实验(没有发布任何内容),我在云中找到的一件事是保存队列的存储帐户.
我甚至尝试在两个地方放置相同的连接字符串(AzureWebJobsDashboard,AzureWebJobsStorage),但抛出异常:"使用此触发器时无法绑定参数'log'."
谢谢.
与Azure WebJobs SDK关联的大多数示例都具有如下所示的启动代码:
static void Main()
{
JobHost h = new JobHost();
h.RunAndBlock();
}
Run Code Online (Sandbox Code Playgroud)
但是,您也可以在不创建如下JobHost
对象的情况下启动WebJob :
static void Main()
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
在什么情况下是JobHost
必要的?
WebJob正在处理来自队列的多条消息,我不想要它.我的队列有依赖消息,我想依次按顺序处理.我已经尝试将"BatchSize"配置为1,但没有运气.它仍然是一次处理多个消息.
azure azure-servicebus-queues azure-webjobs azure-webjobssdk