无法在不同应用程序池中的应用程序之间共享隔离存储文件

时间:2013-03-27 00:30:21

标签: asp.net iis-7.5 isolatedstorage

我在默认网站下的IIS中有各种网络应用程序(包含WCF服务)。只要它们都在同一个应用程序池中运行,它们就可以访问共享的独立存储文件。

但是,一旦我将它们移动到不同的应用程序池,当我试图访问另一个创建的文件时,我得到“System.IO.IsolatedStorage.IsolatedStorageException:无法创建互斥锁”。它们都在NetworkService用户下运行。我尝试了GetUserStoreForAssembly和GetMachineStoreForAssembly都具有相同的结果。有什么想法他们不能使用共享文件?

我确保关闭流甚至处理它,以防一个人抓住它,但我正在运行一个简单的测试,其中一个服务写入它,然后另一个尝试稍后读取它,它总是失败。< / p>

此外,我正在从已签名的程序集中访问隔离的存储。

有人有什么想法吗?

以下是代码:

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

1 个答案:

答案 0 :(得分:1)

看起来这是一个信任问题。

将访问隔离存储文件的程序集添加到gac后,它神奇地起作用,因为gac中的所有内容都自动设置了完全信任。

这适用于我,但对其他解决方案执行此操作可能并不总是一个选项。如果是这种情况,请查看.NET Framework caspol实用程序。

希望这有助于某人!这对我很重要。