我使用.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,因为我的代码能够连接到我的数据库并更新一些记录.
知道我做错了什么吗?
我正在尝试使用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
目前,我们正在AWS Beanstalk上运行我们的应用程序,但正在尝试确定Azure的适用性.
我们最大的问题是我们支付但未使用的CPU时间浪费.我们在t2.small实例上运行,因为它们具有我们需要的最小RAM量,但我们从不使用分配的基本CPU时间量.(对于t2.small来说是20%)我们在当天的短暂爆发期间需要大量的CPU功率,并且在此之前提供更多实例,这是我们处理它的唯一方法.AWS Lambda对我们来说是一个很好的解决方案,但我们依赖于SAPI等Windows组件,因此我们必须在Windows VM中运行.
看看我们认为使用Web角色的Azure云服务最适合我们的应用程序,但似乎Web角色只不过是启用了IIS的Win 2012 VM.因此,随着应用程序的扩展,它只会带来更多这些虚拟机,这正是我们目前所拥有的.Azure是否有类似于Lambda的服务,您只需支付使用的CPU处理时间?我们使用CPU资源效率低的原因是我们的语音生成应用程序使用第三方语音丢失但在调用SAPI时只能运行单线程,因为语音引擎在多线程时容易崩溃.我们无法控制这个语音引擎.它必须能够访问系统注册表和Windows SAPI,因此理想的解决方案是以某种方式包装所有依赖项是一个包并将其部署到Azure上,然后启动它的多个实例.什么"这个"我不知道
我需要绑定到输出blob,但blob路径需要在我的函数中动态计算.我该怎么做?
在编写C#函数时,Azure函数之间ICollector<T>和之间的区别是什么IAsyncCollector<T>(也适用于WebJobs)?
我从样本中了解到这些是我可以用来将函数参数绑定到输出绑定的接口.我也理解这两个接口相应地具有非异步和异步方法签名(即ICollector<T>.Add(item)和IAsyncCollector<T>.AddAsync(item)).但他们在封面下做了什么?它们实际上是将数据发布到输出绑定,还是在函数执行结束时进行内部缓冲和刷新(在这种情况下,为什么会有AddAsync方法)?
WebJob正在处理来自队列的多条消息,我不想要它.我的队列有依赖消息,我想依次按顺序处理.我已经尝试将"BatchSize"配置为1,但没有运气.它仍然是一次处理多个消息.
azure azure-servicebus-queues azure-webjobs azure-webjobssdk
我正在尝试在Azure中克隆我的webapp.
当我运行git clone https://username@appname.scm.azurewebsites.net:443/appname.git终端要求我输入密码时.
但是当我填写我的密码时,它一直说认证失败了.
尽管我在Portal中多次更改了密码(设置 - >设置部署凭据).
它一直说我的身份验证失败了吗?
Azure Functions是否提供本地(状态)存储以消除调用存储,docDB等其他服务的需要?
我想弄清楚如何监听队列中的事件(尤其是入队事件)。
假设我有一个控制台应用程序和一个服务总线队列/主题,我如何连接到队列并等待新消息?
我试图在没有While(true)持续轮询的情况下实现这一点,我试图以一种非常听话的方式来做更多的事情,比如保持连接到队列的套接字。
我不想使用轮询的原因是我知道它会用请求淹没服务器,我需要一个可以在大负载下工作的解决方案。
谢谢你。
为了简单起见,我给出了非常基本的示例,但我的实际情况要复杂一些:
我有使用服务总线队列将需要处理的消息发送到工作角色的 Web API。
我需要以某种方式知道 Worker 何时处理了消息。我希望 Worker 向队列发送一条消息,提醒 Web API 已处理该消息,但现在我需要让 Web API“坐下”并等待 Worker 的回复,这引出了我的问题:
如何在不进行轮询的情况下不断地收听队列(因为有很多实例会进行池化,并且会创建很多可能最好避免的请求。
servicebus azure azure-queues azureservicebus azure-servicebus-queues
我有一个部署到Azure的ASP.NET MVC Web App.VS 2013 Pro中的解决方案有3个项目:
Webjob项目通过Add --> New Azure Webjob Project上下文菜单添加到主App项目中,实际上在同一个解决方案中添加了一个新项目,这很好.
当我最初将应用程序发布到Azure时,Webjob也已部署,并且所有工作都按预期工作.Webjob每天运行一次.
现在我对Webjob进行了一些本地更改,并且需要发布这些更改.我按照相同的过程来部署App(rtClick main App --> Publish),它也应该对Webjob进行更改,但是预览窗格没有获取更改,然后更改随后不会发布到Webjob.
顺便说一句,我对Common项目所做的任何更改都会成功获取,所以看起来有一些奇怪的做法是进行更改和发布Webjobs.
有没有人遇到过这个?