首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java SDK for Azure - RoleEnvironment.getCurrentRoleInstance()错误

Java SDK for Azure - RoleEnvironment.getCurrentRoleInstance()错误
EN

Stack Overflow用户
提问于 2012-02-23 22:44:40
回答 3查看 1.2K关注 0票数 0

我已经使用Tomcat7部署了一个worker角色和一个非常简单的测试servlet,它应该只显示服务实例的ID (我想跨多个实例测试会话管理解决方案)。

我正在使用Azure SDK for java (github.com/WindowsAzure/azure-sdk-for-java)

问题是,当我调用以下代码时,Tomcat抛出错误:

代码语言:javascript
复制
RoleEnvironment.getCurrentRoleInstance().getId()

实际抛出的错误是:

代码语言:javascript
复制
com.microsoft.windowsazure.serviceruntime.RoleEnvironmentNotAvailableException
com.microsoft.windowsazure.serviceruntime.RoleEnvironment.initialize(RoleEnvironment.java:77)
com.microsoft.windowsazure.serviceruntime.RoleEnvironment.getCurrentRoleInstance(RoleEnvironment.java:331)
com.anubex.test.TestSessionServlet.doGet(TestSessionServlet.java:35)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause

java.lang.RuntimeException: java.io.FileNotFoundException: \\.\pipe\WindowsAzureRuntime (The system cannot find the file specified)
com.microsoft.windowsazure.serviceruntime.FileInputChannel.getInputStream(FileInputChannel.java:33)
com.microsoft.windowsazure.serviceruntime.RuntimeVersionProtocolClient.getVersionMap(RuntimeVersionProtocolClient.java:41)
com.microsoft.windowsazure.serviceruntime.RuntimeVersionManager.getRuntimeClient(RuntimeVersionManager.java:48)
com.microsoft.windowsazure.serviceruntime.RoleEnvironment.initialize(RoleEnvironment.java:74)
com.microsoft.windowsazure.serviceruntime.RoleEnvironment.getCurrentRoleInstance(RoleEnvironment.java:331)
com.anubex.test.TestSessionServlet.doGet(TestSessionServlet.java:35)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause

java.io.FileNotFoundException: \\.\pipe\WindowsAzureRuntime (The system cannot find the file specified)
java.io.FileInputStream.open(Native Method)
java.io.FileInputStream.<init>(FileInputStream.java:120)
java.io.FileInputStream.<init>(FileInputStream.java:79)
com.microsoft.windowsazure.serviceruntime.FileInputChannel.getInputStream(FileInputChannel.java:30)
com.microsoft.windowsazure.serviceruntime.RuntimeVersionProtocolClient.getVersionMap(RuntimeVersionProtocolClient.java:41)
com.microsoft.windowsazure.serviceruntime.RuntimeVersionManager.getRuntimeClient(RuntimeVersionManager.java:48)
com.microsoft.windowsazure.serviceruntime.RoleEnvironment.initialize(RoleEnvironment.java:74)
com.microsoft.windowsazure.serviceruntime.RoleEnvironment.getCurrentRoleInstance(RoleEnvironment.java:331)
com.anubex.test.TestSessionServlet.doGet(TestSessionServlet.java:35)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

问题似乎是找不到以下命名管道:

代码语言:javascript
复制
\\.\pipe\WindowsAzureRuntime

不确定这是如何创建的/在哪里创建的。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-05 18:04:55

我偶然发现了同样的问题和帮助的描述:http://msdn.microsoft.com/en-us/library/hh690948(VS.103).aspx

希望这能帮上忙

Patriek

票数 1
EN

Stack Overflow用户

发布于 2012-02-23 23:28:10

RoleEnvironmentNotAvailableException会告诉你代码没有在Azure角色的上下文中运行。在为Azure开发应用程序时,您的应用程序可以通过两种方式在Azure角色的上下文中运行:它要么在Azure服务器上的云中运行,要么在Azure SDK中的Compute Emulator中运行。

在您的例子中,看起来您既没有在云中运行,也没有在模拟器中运行,因此抛出了异常。若要解决此问题,您需要将项目设置为使用模拟器。以下是如何做到这一点的演练:http://msdn.microsoft.com/en-us/library/windowsazure/hh690944(v=vs.103).aspx

顺便说一句,你可以通过检查RoleEnvironment.isAvailable()来检查你是否在Azure角色的上下文中运行,你可以通过检查RoleEnvironment.isEmulated()来检查它是否被仿真(例如,在开发中运行与在云中运行)。

票数 1
EN

Stack Overflow用户

发布于 2013-02-16 02:13:40

我猜您正在使用AzureRunMe来运行您的Java项目。在Windows Azure Service Runtime中,有两种机制来提供RoleEnviroment信息。第一种是通过.NET程序集,第二种是通过Windows的命名管道。第一种方法由.NET应用程序使用,第二种方法由非.NET语言编写的应用程序使用。但是,除非通过ServiceDefinition文件中的ProgramEntryPoint启动程序,否则第二种方法不可用。

您面临的场景是通过第一种方法启动AzureRunMe,但Java SDK试图通过第二种方法访问RoleEnviroment。当时它失败了。

有两种缓解策略值得探索。A.更新AzureRunMe以向Java公开RoleEnviroment信息。B.通过ProgramEntryPoint运行AzureRunMe。我很好奇它是怎么回事。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9415237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档