我已经使用 Tomcat 7 和一个非常简单的测试 servlet 部署了一个工作角色,它应该只显示服务实例的 ID(我想跨多个实例测试会话管理解决方案)。
我正在使用 Azure SDK for java (github.com/WindowsAzure/azure-sdk-for-java)
问题是当我调用以下命令时 Tomcat 会引发错误:
RoleEnvironment.getCurrentRoleInstance().getId()
抛出的实际错误是:
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)
问题似乎是找不到以下命名管道:
\\.\pipe\WindowsAzureRuntime
不确定它是如何/在哪里创建的。有任何想法吗?