2017-02-21 4 views
2

Azure Appサービスとして実行するLoupeサービスの検証に取り組んでいます。一時ディレクトリを解決しようとするものは例外で失敗しますAzure Appサービスでホストされている.NET Webサイトの一時ディレクトリを取得できません。

 
    mscorlib : System.IO.IOException 
    The directory name is invalid. 
     at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
     at System.IO.__Error.WinIOError() 
     at System.IO.Path.InternalGetTempFileName(Boolean checkHost) 

スタックトレースは、一時ファイル名を生成するための.NETメソッド内でこれを持っています。このスタックトレースは、ほとんどすべての失敗領域に共通しています。私たちがサイトを強制的に再起動したり、強制的に元のApp Service Planを再スケーリングしたりすると、サイトを次回更新するまではなくなるはずです。

偽装が有効になっている場合にこのエラーが発生し、偽装したユーザーがIIS App Poolユーザーの一時ディレクトリにアクセスできないという唯一の検索結果があるため、まず、失敗した要求が行われた時点でスレッドが偽装していないことをログから確認できます。次に、楽しいためにweb.configにこれを追加して二重になるようにしました。

<system.web>   
    <identity impersonate="false"/> 
</system.web> 

すべては無駄です。これがAzure App Servicesの一般的な問題だった場合、私はそれが多くのシステムを壊してしまうだろうと推測していましたので、魅力的で間違ったことをしていると結論づけなければなりません。

+0

いつもこのエラーが出ますか、それとも時々正しく動作していますか? –

+1

この時点で、一時ディレクトリ* boom *が必要なものを呼び出すたびに、それ以上は動作しません。以前はプロセスがこの動作を示していた頃には戻ってこなかったが、再起動すると時折(プロセスの寿命の間)動作した。 –

答えて

0

これはあなたが探している正確な答えではないかもしれませんが、正しい方向に向けるのに役立ちます。

Azure App Servicesを使用して、私は同じ問題を抱えていました。私は、ローカルファイルシステムへのアクセスに多少問題があることを発見しました。時々それはうまく働いたし、それ以外のときはうまくいった。

最終的に、Azure App Serviceがインスタンス化されると、そのシステムの背後のシステムには常に同じドライブ文字が使用されるとは限りません。場合によっては、環境変数がまったく間違っている可能性があります。彼らは彼らが適切に設定されていると思うが、それは必ずしもそうではない。

一時ファイル名を生成すると、パスにその環境変数が使用され、C:に設定されている場合、マシンには代わりにD:ドライブがあり、失敗するとエラーになります。 C:ドライブが存在しないため、一時ファイルへのパスも存在しません。

これが問題であるかどうかを確認するには、RDPを有効にして、直接ログインできるようにする必要があります。 https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-role-enable-remote-desktop

私はそれを最終的に把握することができた唯一の方法です。

+0

彼はクラウドサービスではなく、Azure App Serviceを使用しています。 –

+0

ああ、それは私のせいです。これに遭遇したとき、私はWorkerの役割を使用していました。 App Servicesが別のものだったと私は同じであると思った。私はちょうど私が正しい方向に導くかもしれないものに遭遇したような何かを指していた。訂正ありがとう! –

+0

右のWeb /ワーカーロールインスタンスはドライブ文字を変更します。 Webアプリケーションは 'd:\ home \ ...'を使用するだけです。 –

0

App Service Web App用のKuduインスタンスを開くと、その下にある管理対象VMのローカルTempディレクトリが表示されます。 Kuduにアクセスするには、Azure PortalのApp Serviceブレードの「Advanced Tools」にアクセスするか、Webアプリケーションのhttps:// {web app name} .scm.azurewebsites.netドメインに移動します。

Kuduに入ったら、一番上のナビゲーションの[環境]をクリックします。 Tempディレクトリは通常D:\ local \ Tempであり、そのパスはWebアプリケーションからアクセス可能な "TEMP"環境変数に格納されています。

+0

実際には、期待どおりに一時ディレクトリがあります。問題は、アプリケーションの呼び出しによってtempディレクトリを解決しようとしたときに、ディレクトリのアクセスが失敗する(またはディレクトリにアクセスできない)ということです。 –

関連する問題