我有一个复杂的.jar文件,我需要在azure上运行(C#ASP.NET)。在我的本地系统上,我只是运行java.exe并将jar作为参数传递给它。我想在服务器上做同样的事情,但是,我不知道java.exe的位置。
我看了一下环境变量并发现了很多jdk和jre引用,所以我认为它是可能的。
我无法使用ikvm,因为jar太复杂而无法正常运行。
所以,作为总结:java.exe位于azure的哪个位置?如果不是(我不能这样做),我还能做些什么呢?
编辑:
澄清更多:我正在使用ASP.NET开发一个Web应用程序。我有一个我必须运行的.jar文件,在本地机器上我运行它:
processStartInfo = new ProcessStartInfo("java");
processStartInfo.Arguments = arguments;
//more options
Process process = new Process();
process.StartInfo = processStartInfo;
process.Start();
process.WaitForExit();
现在我将这个网站发布到微软的Azure服务中,我想做同样的事情。除了,按原样运行它告诉我,该过程无法运行(即他们不理解" java"是什么)。我想找到一种方法可以将java作为一个进程调用。显然,如果我知道java.exe的路径,我只需将路径作为命令运行,我就完成了(即它将执行java)。这就是我需要帮助的地方。
答案 0 :(得分:3)
正如derpirscher在评论中提到的那样,您还没有指定要使用的Azure服务类型,并且您还没有指定Java代码的性质(它是否侦听某些端口上的传入连接) ?它与任何外部服务进行对话吗?等等)。更多信息将帮助我们为您提供更好的答案。
那说......开始的一个选项是Azure Web Jobs,它允许您上传和运行(以及其他选项)Java .jar文件:
如该链接上的信息所示,您可以按需,连续或定期运行。这里有一些额外的细节:
Executing Java Web Jobs on Azure
有关在Azure上运行Java代码以及从Java代码中与Azure服务交互的更多常规信息,请参阅此处:
具体来说,以下是Web作业之外的一些其他部署选项:
祝你好运!
根据您的其他反馈进行编辑:
因此,如果我理解,您希望在用户输入某个查询等时从ASP.NET应用程序生成新进程来调用Java .jar文件?
我可以想到两个可能的选择:
在使用正确版本的Java等自定义的Azure虚拟机上托管ASP.NET应用程序和.jar。这样您就可以按照自己喜欢的路径配置Java,等
将用于托管ASP.NET应用程序的资源与用于调用Java代码的资源分离(例如)将您的站点托管为Azure Web App并将消息从那里写入Azure存储队列Java代码应该执行的时间。在队列的接收端,您将Azure Web作业配置为侦听该队列,并在新消息到达时执行.jar文件。
Triggering a Web Job from an Azure Queue
一般而言,从可扩展性和纯设计角度来看,选项2将更为可取(允许您将接受查询与处理查询的关注点分开,将成本与实际资源消耗直接对齐等),但选项1可能更容易从不熟悉Azure或云架构的人的角度来看。
请注意,根据您必须执行的处理的性质,预期的并发用户数等,可接受的基于VM的解决方案可能比上述选项1更昂贵。像云计算中的许多事情一样,它最终需要在此处进行时间与费用之间的权衡。
答案 1 :(得分:2)
假设您在C#/ ASP.NET中的应用程序在Azure WebApp上运行Azure App Service。因此,您可以通过URL https://<your-webapp-name>.scm.azurewebsites.net/DebugConsole
访问Kudu控制台,然后您可以命令cd ..\"Program Files (x86)"\Java
移动到不同版本的Java SDK集合的路径。
请尝试使用java.exe
的绝对路径(如D:\\Program Files (x86)\\Java\\jdk<version\\bin\\java.exe>
)作为C#类ProcessStartInfo
的参数。
但是,我仍然建议您尝试使用Azure VM部署应用程序,并通过在VM上配置相关环境变量来运行应用程序。