我有以下场景:
问题是,如何将webjob的进度传达给客户?最初我的想法是从webjob推送消息,因此Hub可以从队列中读取它.然后,我会通过集线器通知客户.但是,我无法找到传达webjob和集线器的方法,当消息被推入队列或服务总线时,我不知道如何在集线器中触发操作.也就是说,我不知道如何将集线器订阅到队列的某个消息.
有人可以帮我吗?
signalr azure-servicebus-queues asp.net-mvc-5 azure-webjobs azure-webjobssdk
我有一个解析ServiceBus主题订阅的WebJob.
现在我读了几个使用WebJob绑定机制来使代码更清晰的例子. https://github.com/Azure/azure-webjobs-sdk-samples/blob/master/BasicSamples/ServiceBus/Functions.cs http://blog.devscrum.net/2014/09/using-azure-web-jobs -simplify-running-background-processes/ http://blogs.blackmarble.co.uk/blogs/sspencer/post/2014/07/03/Creating-a-Simple-Workflow-with-Azure-Webjobs-and-Service -Bus.aspx
所以我在Nuget中下载了以下内容:
Microsoft.Azure.WebJobs 1.0.0
Windows.Azure.Storage 4.3.0
命名空间看起来很好.QueueTrigger在那里.但ServiceBusTrigger无处可寻!这个绑定突然从范围中移除了吗?
我没有得到取消令牌和网络工作背后的机制.
我知道我可以Microsoft.Azure.WebJobs.WebJobsShutdownWatcher().Token用来获取令牌并做出反应,token.IsCancellationRequested例如当WebJobs更新时.
场景: 由服务总线消息触发的连续作业.该作业调用我的数据层中的方法.此方法对azure sql数据库上的不同表执行一些更新.该方法运行约两分钟.
现在我将令牌传递给数据层,我会在没有请求取消的情况下完成我的工作; 否则我会结束我的更新.
现在的问题是:
作业主机是否等待我的方法,直到它完成然后停止?
我是否必须将"stopping_wait_time"设置为一个值(无论如何是默认值?),以确保我的工作正常完成?
如果将新消息写入服务总线队列,该消息是否会触发新作业,尽管取消正在等待处理?
谢谢你的任何澄清!
将我自己的项目从早期(几个月前)版本的Azure功能升级到当前版本后,从VS启动时出现以下错误.
GetLoginUrl:Microsoft.Azure.WebJobs.Host:错误索引方法'Login.GetLoginUrl'.Microsoft.Azure.WebJobs.Host:无法将参数'log'绑定到类型ILogger.确保绑定支持参数Type.如果您正在使用绑定扩展(例如ServiceBus,Timers等),请确保您已在启动代码中调用扩展的注册方法(例如config.UseServiceBus(),config.UseTimers()等).
之前,我曾经把TraceWriter log我的方法作为最后一个参数,但后来我发现我应该使用它ILogger.在我做出改变之前,我得到了与上面相同的错误.
本ILogger似乎被映射到组装Microsoft.Extensions.Logging.Abstractions.也许这就是为什么它不被认可?哪个ILogger应该用?这是方法签名.
[FunctionName("GetLoginUrl")]
public static HttpResponseMessage GetLoginUrl(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]HttpRequestMessage req,
ILogger log)
Run Code Online (Sandbox Code Playgroud)
我没有尝试将其部署到Azure.
不幸的是,创建一个全新的函数项目并没有帮助,因为没有.CS文件可以查找以纠正这个问题.
我有一个带有两个WebJobs的ASP.NET项目,其中一个WebJobs发布很好,但第二个无法发布,我收到以下错误消息:
项目中不存在目标"AddScheduledJob".
两个WebJobs都设置在"按需运行"模式下.
我正在努力找到这个错误的任何解释,并且无法看到我的两个WebJobs之间有什么不同.有人碰到过这个吗?
编辑
我最终发现了这个问题,感谢David Ebbo指出我正确的方向.我发现我的一个WebJobs项目的.csproj文件中有两个导入行:
<Import Project="..\packages\Microsoft.Web.WebJobs.Publish.1.0.2\tools\webjobs.targets" Condition="Exists('..\packages\Microsoft.Web.WebJobs.Publish.1.0.2\tools\webjobs.targets')" />
Run Code Online (Sandbox Code Playgroud)
删除第一个后,一切正常.我不知道这是怎么发生的,但只能假设我更新了NuGet包时出了问题.
我有一个Visual Studio 2017解决方案,同时具有ASP.NET Web应用程序项目(称为UI)和Azure WebJob项目(称为WebJobs)。我已经将两者都配置为从Visual Studio(右键单击,发布)中部署到Azure到同一App Service。该解决方案还配置为每当我推送到VSTS时就构建。
我想设置VSTS,以便在成功构建后也部署两个项目,但是我遇到了问题。
我的理解是,要实现这一点,我需要创建一个发布定义,该发布定义通过添加到管道中的“部署Azure应用服务”任务链接到我的构建定义。我尝试了此操作,但出现错误,因为在artifacts文件夹中找到多个.zip文件,建议我使过滤器更具体,因此我将“ Package or folder”选项从$(System.DefaultWorkingDirectory)/**/*.zip更改为$(System.DefaultWorkingDirectory)/**/UI.zip。这可以解决该错误,但现在显然只在部署我的应用程序(UI)。
我的下一步是尝试为WebJob项目创建一个单独的环境,并将其指定$(System.DefaultWorkingDirectory)/**/WebJobs.zip为Package。现在,两种环境都“成功”部署,但它破坏了我的应用程序,我很确定它已经在应用程序顶部部署了WebJob(我不知道如何确认这种信念...)。
我注意到,当您向发行版定义添加环境并选择模板时,在“ Azure App Service部署”下显示:“将应用程序部署到Azure App Services。从Windows,Linux,Containers,Function Apps或Web应用Web Jobs ”,但是在选择此模板时,“应用程序类型”下拉列表中未列出WebJob!
我在网上找到了一些有关从VSTS部署WebJob的资源,但是它们都已过时,并且所描述的选项不再与VSTS中的当前选项匹配。
大卫·埃博(David Ebbo)和陈星辰(starian chen)的以下回答都解决了我的问题。
首先,您必须右键单击Visual Studio中的Web App项目,然后选择“ 添加”>“现有项目”作为Azure WebJob,然后按照向导进行操作。接下来,您必须确保VSTS部署任务通过更新软件包或文件夹路径过滤器来确保仅找到一个要部署的.zip软件包,因此它仅找到Web应用程序的.zip软件包。就我而言$(System.DefaultWorkingDirectory)/**/UI.zip。
非常感谢@DavidEbbo和@starianchen的帮助!
azure azure-webjobs azure-web-app-service azure-devops azure-pipelines-release-pipeline
我希望能够编写类似的代码
using (await LockAsync(x.Id))
{
// here goes code that is unsafe with respect to x.Id
// because it can be executed in multiple threads on
// the same instance or on multiple instances (e.g.
// multiple Azure Functions
}
Run Code Online (Sandbox Code Playgroud)
我知道有一些开箱即用的方法可以在不使用密钥的情况下锁定整个执行上下文(例如[ActivityTrigger]在函数中),并且我知道我可以使用 blob 租约滚动自己的带钥匙的锁,但是有没有一种开箱即用的方法钥匙锁?
缺少升级到 Webjob V3 的参考
安装参考
“IWebJobsBuilder”不包含“AddTimers”的定义,并且找不到接受“IWebJobsBuilder”类型的第一个参数的可访问扩展方法“AddTimers”(您是否缺少 using 指令或程序集引用?)
我正在尝试将 webjob 发布到 Azure,但出现一些如下错误。看起来是因为在“Out”之后的路径中它添加了两个反斜杠而不是一个(PubTmp\Out\\app_data)。
28>Could not copy "C:\Development\TNG\ActivationService\bin\Release\netcoreapp3.1\TNG.Services.WindowsService.ActivationService.runtimeconfig.json" to "C:\Development\TNG\ActivationService\obj\Release\netcoreapp3.1\PubTmp\Out\\app_data\Jobs\Continuous\TNG.Services.WindowsService.ActivationService\TNG.Services.WindowsService.ActivationService.runtimeconfig.json". Beginning retry 1 in 1000ms. Could not find a part of the path 'C:\Development\TNG\ActivationService\obj\Release\netcoreapp3.1\PubTmp\Out\\app_data\Jobs\Continuous\TNG.Services.WindowsService.ActivationService\TNG.Services.WindowsService.ActivationService.runtimeconfig.json'.
28>Could not copy "C:\Users\mohsen.rezaei\.nuget\packages\microsoft.extensions.configuration.azureappconfiguration\4.0.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.AzureAppConfiguration.dll" to "C:\Development\TNG\ActivationService\obj\Release\netcoreapp3.1\PubTmp\Out\\app_data\Jobs\Continuous\TNG.Services.WindowsService.ActivationService\Microsoft.Extensions.Configuration.AzureAppConfiguration.dll". Beginning retry 1 in 1000ms. Could not find a part of the path 'C:\Development\TNG\ActivationService\obj\Release\netcoreapp3.1\PubTmp\Out\\app_data\Jobs\Continuous\TNG.Services.WindowsService.ActivationService\Microsoft.Extensions.Configuration.AzureAppConfiguration.dll'.
28>Could not copy "C:\Users\mohsen.rezaei\.nuget\packages\microsoft.extensions.configuration.environmentvariables\3.1.6\lib\netcoreapp3.1\Microsoft.Extensions.Configuration.EnvironmentVariables.dll" to "C:\Development\TNG\ActivationService\obj\Release\netcoreapp3.1\PubTmp\Out\\app_data\Jobs\Continuous\TNG.Services.WindowsService.ActivationService\Microsoft.Extensions.Configuration.EnvironmentVariables.dll". Beginning retry 1 in 1000ms. Could not find a part of the path 'C:\Development\TNG\ActivationService\obj\Release\netcoreapp3.1\PubTmp\Out\\app_data\Jobs\Continuous\TNG.Services.WindowsService.ActivationService\Microsoft.Extensions.Configuration.EnvironmentVariables.dll'.
28>Could not copy "C:\Users\mohsen.rezaei\.nuget\packages\microsoft.extensions.dependencyinjection.abstractions\3.1.6\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll" to "C:\Development\TNG\ActivationService\obj\Release\netcoreapp3.1\PubTmp\Out\\app_data\Jobs\Continuous\TNG.Services.WindowsService.ActivationService\Microsoft.Extensions.DependencyInjection.Abstractions.dll". Beginning retry 1 in 1000ms. Could not find a part …Run Code Online (Sandbox Code Playgroud) 我正在尝试将几个基于 dotnet 的功能应用程序 (v3) 迁移到 docker 容器。为此,我们使用mcr.microsoft.com/azure-functions/dotnet中的图像作为基础
当使用 docker run 进行本地测试时,我经常遇到这样的问题:对容器的 http 调用返回错误Function host is not running并结合以下 Docker CLI 输出:
Starting OpenBSD Secure Shell server: sshd.
Hosting environment: Development
Content root path: /home/site/wwwroot
Now listening on: http://[::]:80
Application started. Press Ctrl+C to shut down.
Run Code Online (Sandbox Code Playgroud)
这仅仅意味着函数应用程序不会加载/启动,但真正的原因仍然隐藏。我一直在尝试获取更多日志记录/诊断数据来确定根本原因,但到目前为止失败了。因此,每当这种情况发生时,我都必须开始一个令人筋疲力尽的试错测试循环。到目前为止,这些情况已经花了我几天(几周?)
问题:发生此错误时如何获取更多诊断数据?
[更新] Dockerfile:
Starting OpenBSD Secure Shell server: sshd.
Hosting environment: Development
Content root path: /home/site/wwwroot
Now listening on: http://[::]:80
Application started. Press Ctrl+C to shut down.
Run Code Online (Sandbox Code Playgroud) azure-webjobs ×10
azure ×6
c# ×3
.net ×1
.net-core ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
azure-devops ×1
azure-pipelines-release-pipeline ×1
docker ×1
locking ×1
publish ×1
servicebus ×1
signalr ×1