0

Tomcat 7 を使用して worker ロールを展開し、サービス提供インスタンスの 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

これがどのように/どこで作成されるかわかりません。何か案は?

4

3 に答える 3

1

同じ問題とこのヘルプの説明に出くわしました: http://msdn.microsoft.com/en-us/library/hh690948(VS.103).aspx

お役に立てれば、

パトリック

于 2012-03-05T10:04:55.193 に答える
1

RoleEnvironmentNotAvailableException は、コードが Azure ロールのコンテキストで実行されていないことを示します。Azure 用のアプリケーションを開発する場合、アプリケーションを Azure ロールのコンテキストに置く方法は 2 つあります。Azure のサーバー上のクラウドで実行する方法と、Azure SDK の一部であるコンピューティング エミュレーターで実行する方法です。

あなたの場合、クラウドでもエミュレーターでも実行されていないように見えるため、例外がスローされます。これを解決するには、エミュレーターを使用するようにプロジェクトをセットアップする必要があります。これを行う方法のチュートリアルは次のとおりです 。 http://msdn.microsoft.com/en-us/library/windowsazure/hh690944(v=vs.103).aspx

補足として、RoleEnvironment.isAvailable() を確認することで、Azure ロールのコンテキストで実行しているかどうかを確認できます。また、それがエミュレートされているかどうか (つまり、開発で実行されているか、環境で実行されているか) も確認できます。 cloud) RoleEnvironment.isEmulated() をチェックします。

于 2012-02-23T15:28:10.370 に答える
1

AzureRunMeを使用して Java プロジェクトを実行していると思います。Windows Azure サービス ランタイムには、RoleEnviroment 情報を提供するメカニズムが 2 つあります。1 つ目は .NET アセンブリ経由で、2 つ目は Windows 名前付きパイプ経由です。最初の方法は .NET アプリケーションで使用するためのもので、2 番目の方法は .NET 以外の言語で作成されたアプリケーションで使用するためのものです。ただし、プログラムが ServiceDefinition ファイルの ProgramEntryPoint を介して開始されない限り、2 番目の方法は使用できません。

直面しているシナリオは、AzureRunMeが最初の方法で開始されているが、Java SDK が 2 番目の方法で RoleEnviroment にアクセスしようとしているというものです。その時は失敗しました。

調査する価値のある 2 つの緩和戦略があります。A. AzureRunMeを更新して、RoleEnviroment 情報を Java に公開します。B. ProgramEntryPoint 経由で AzureRunMe を実行します。私はそれがどうなるか興味があります。

于 2013-02-15T18:13:39.787 に答える