我编写了一个MVC6站点和一个控制台应用程序,代表网站处理Azure消息和blob存储。在我的开发机器上一切正常,我可以在Azure上成功部署和运行该站点。
我磕磕绊绊的是如何“链接”控制台应用程序和mvc6网站,这样当我发布网站时,控制台app / webjob会自动发布。
控制台应用程序是在默认控制台应用程序模板上构建的。它的project.json文件是:
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true
},
"dependencies": {
"ConnellData": "1.0.0-*",
"WindowsAzure.Storage": "7.2.1",
"Microsoft.Azure.WebJobs": "1.1.2",
"Microsoft.Azure.WebJobs.Core": "1.1.2",
"Microsoft.EntityFrameworkCore": "1.0.1",
"Microsoft.Web.WebJobs.Publish": "1.0.12",
"Microsoft.WindowsAzure.ConfigurationManager": "3.2.1",
"Newtonsoft.Json": "6.0.8",
"Serilog": "2.2.1",
"Serilog.Sinks.TextWriter": "2.0.0",
"UploadFramework": "1.0.0-*",
"ConnellDBF": "1.0.0-*",
"PDFsharp-MigraDoc-GDI": "1.50.4000-beta3b",
"Zen.Barcode.Rendering.Framework": "3.1.10729.1"
},
"frameworks": {
"net46": {
"frameworkAssemblies": {
"System.Configuration": "4.0.0.0",
"System.IO.Compression": "4.0.0.0"
}
}
}
}
正如您所看到的,它建立在Net46之上,与mvc6网站项目一样。
当我右键单击控制台应用程序项目时,没有选项将其作为Azure webjob发布。同样,当我右键单击网站项目时,Add下没有选项可添加“依赖”webjob。
我在解决方案中添加了一个基于默认WebJob模板构建的虚拟WebJob项目,它具有预期的“发布为Azure WebJob”选项。很明显,我在开发机器上安装了正确的东西。这只是我在控制台应用程序的配置/设置中丢失了一些内容(也可能是网站)。
想法或建议?
答案 0 :(得分:0)
你安装了webjobs SDK吗?我在Visual Studio中右键单击项目时看到“发布为Azure Webjob”选项
此处有更多信息
https://azure.microsoft.com/en-gb/documentation/articles/websites-dotnet-deploy-webjobs/
答案 1 :(得分:0)
我从未弄清楚为什么不会出现涉及将控制台应用程序发布为WebJob的上下文菜单选项。这可能与VS2015工具没有赶上ASPNET Core有关。
无论如何,我能够通过手动将控制台应用程序上传到wwwroot / App_Data / jobs / continuous /来解决此问题。我是通过FTP完成的。
然而,将控制台应用程序设置为>>运行<<在Azure下是另一个问题。 WebJob应用程序通常由调用run.cmd批处理文件的站点启动。在我的例子中,run.cmd文件包含一行调用控制台应用程序的执行(在我的例子中是UploadProcessor.exe)。
不幸的是,我不知道,VS2015默认保存了一个" UTF-8字节顺序标记'在它创建的每个文本文件中。出于某些奇怪的原因,Azure处理器不知道如何识别这组标记字符,并且爆炸。
解决方案是在VS2015中为run.cmd文件执行另存为,并遍历选项以将文件另存为UTF-8>>而不使用<< BOM。创建run.cmd时,您只需执行一次;此后,VS2015将记住您的"没有BOM"设置。
我在http://imperfect.olbert.com/2016/09/23/azure-webjobs-hidden-utf-8-parameters-and-azure/
处写了更多关于此内容的文章希望Azure团队能解决这个简单但烦人的问题。