关闭从应用程序在Web服务上创建的MemoryStream



问题

我正在开发一个windows平板电脑应用程序,该应用程序需要从服务器访问图像。为此,我有一个VB.NET网络服务,可以访问包含图片的文件夹。

一旦我转移了MemoryStream并在本地创建了图片,我就试图处理流,但它似乎不起作用。我知道这一点,因为服务器上的图片大约需要20分钟才能被释放(在这段时间过去之前我无法删除它们)

我如何继续

这是我的web服务上的方法,允许我浏览图片并将其输入MemoryStreams

    Function Execute(TypeOfPictures As String) As List(Of MemoryStream)
        Dim PicturesinDirectory As List(Of String) = Directory.GetFiles("Path").ToList()
        Dim bmp As Bitmap
        Dim lstStreamsToSend As List(Of MemoryStream) = New List(Of MemoryStream)
        For i = 0 To PicturesinDirectory.Count - 1
            'Get the image from file using the path stored in PicturesinDirectory(i)
            bmp = Image.FromFile(PicturesinDirectory(i))
            'Affect the memorystream
            Dim memory As MemoryStream = New MemoryStream()
            bmp.Save(memory, ImageFormat.Jpeg)
            memory.Position = 0
            lstStreamsToSend.Add(memory)
        Next
        Return lstPicturesToSend
    End Function

客户端上的代码

Dim service As New ServiceReference1.Service1Client(ServiceReference1.Service1Client.EndpointConfiguration.BasicHttpBinding_IService1)
Dim rcv = Await service.GetPicturesAsync(_folderName)
For i = 0 To rcv.Count - 1
    'Here I save each picture locally using the stream
    'I then try to dispose of the stream
    rcv(i).Dispose()
Next

限制

  1. 我无法关闭服务上的stream,因为它会阻止我稍后在上在客户端上写入

  2. 我无法在本地测试,因为当服务是本地的并且没有在网上发布时,图片会立即释放(没有问题)。这迫使我在每次测试之间等待20分钟,或者要求老板重新启动服务,这是不可能的。

问题

由于无法正确使用using块来处理和关闭流,如何在Application/Web Service环境中进行处理?

我是做错了什么还是错过了重要的事情?

客户端上的对象独立于服务器进程中的任何对象。关闭客户端上的任何内容都不会影响服务器。rcv(i).Dispose()什么也不做。

您的资源泄漏是bmp。实际上,您可能应该使用File.ReadAllBytes。为什么要重新编码图片?

20分钟的超时可能是IIS关闭了空闲服务器。

最新更新