2017-11-15 4 views
1

私はVB.NETのWebアプリケーションのフロントエンドとVB.NETのWindowsアプリケーションのバックエンドを両方ともAzure Windows 2012サーバーVM上で実行しています。VB.NETのWindowsアプリケーションとVB.NETのWebアプリケーション間のファイル共有との競合を防ぐ方法

バックエンドは10秒ごとに実行され、データファイルを確認し、データを書き込むことがあります。

フロントエンド(ウェブ)は、ユーザーがウェブを使用しているときにデータファイルにアクセスします。

My.Computer.FileSystem.WriteAllTextまたはMy.Computer.FileSystem.ReadAllTextを実行すると、Webにエラーが発生することがあります。

これら2つの方法は、バックエンドとフロントエンドの両方がデータファイルにアクセスする方法です。 データファイルはすべて、単純な.txtテキストベースのファイルです。

+0

質問を編集して、ファイルに書き込むエラーとコードを追加してください。 – CSharpRocks

答えて

1

障害が断続的であると判断して、2つのプロセスで競合の問題が発生している可能性があります。手動でファイルに書き込むと、あなたは、少なくとも問題のいくつかを軽減しますいくつかの共有を実現することを確認したい場合があります:

Using fs As New FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read), 
     sw As New StreamWriter(fs) 
    sw.Write("A whole bunch of text to write") 
End Using 

上記のコードは、それだけをロックし、読み取りを配置した後、ファイルを開きます。これにより、その後のプロセスでファイルを開いて読み込むことができます。たとえば、Windowsアプリケーションでこのファイルを保持している間でも、Webアプリケーションは投げずにそのファイルを読み取ることができます。

Using fs As New FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), 
     sr As New StreamReader(fs) 
    Console.WriteLine(sr.ReadToEnd()) 
End Using 

この最後のスニペットは、ファイルの読み取りに使用するものです。読み込み/書き込み共有が開かれると、その共有が配置されます。このプロセスはファイルからのみ読み込みを行うため、他のプロセスが問題なく読み取りのために開くことを許可することができます。この場合、他のプロセスが制限されないようにファイルに書き込むことを許可しました。

別のプロセスによって設定されたロックのために指定したモードで開くことができない場合に発生する例外を処理する必要があります。

関連する問題