デフォルトのWebサイトのIISにさまざまなWebアプリ(WCFサービスを含む)があります。それらがすべて同じアプリプールで実行されている限り、共有の分離されたストレージファイルに問題なくアクセスできます。
ただし、それらを別のアプリプールに移動すると、別のファイルにアクセスしようとすると、「System.IO.IsolatedStorage.IsolatedStorageException:ミューテックスを作成できません」というメッセージが表示されます。それらはすべてNetworkServiceユーザーの下で実行されています。GetUserStoreForAssemblyとGetMachineStoreForAssemblyをすべて試しましたが、すべて同じ結果になりました。共有ファイルを使用できなかった理由はありますか?
ストリームを閉じて、保持している場合に備えて破棄するようにしましたが、あるサービスがストリームを書き込み、別のサービスが後でそれを読み取ろうとすると、常に失敗するという簡単なテストを実行しています。
また、署名されたアセンブリから隔離されたストアにアクセスしています。
誰かアイデアはありますか?
コードは次のとおりです。
Private Sub LoadData()
Dim filename = FullFilePath(_fileName)
Dim isoStorage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly()
' Tried GetMachineStoreForAssembly, same failure
isoStorage.CreateDirectory(ROOT_DIRECTORY)
If (isoStorage.GetFileNames(filename).Length = 0) Then
Return
End If
Dim stream As Stream = New IsolatedStorageFileStream(filename, FileMode.OpenOrCreate, isoStorage)
If stream IsNot Nothing Then
Try
Dim formatter As IFormatter = New BinaryFormatter()
Dim appData As Hashtable = DirectCast(formatter.Deserialize(stream), Hashtable)
Dim enumerator As IDictionaryEnumerator = appData.GetEnumerator()
While enumerator.MoveNext()
Me(enumerator.Key) = enumerator.Value
End While
Finally
stream.Close()
stream.Dispose()
stream = Nothing
End Try
End If
End Sub
Public Sub Save()
Dim filename = FullFilePath(_fileName)
' Open the stream from the IsolatedStorage.
Dim isoFile As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForAssembly()
' Tried GetMachineStoreForAssembly, same failure
Dim stream As Stream = New IsolatedStorageFileStream(filename, FileMode.Create, isoFile)
If stream IsNot Nothing Then
Try
Dim formatter As IFormatter = New BinaryFormatter()
formatter.Serialize(stream, DirectCast(Me, Hashtable))
Finally
stream.Close()
stream.Dispose()
stream = Nothing
End Try
End If
End Sub