关闭从应用程序的webservice创建的MemoryStream

时间:2015-06-26 18:52:04

标签: .net vb.net web-services stream windows-store-apps

问题

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

一旦我转移了MemoryStream并在本地创建了图片,我会尝试处理该流,但它似乎无法正常工作。我知道这是因为服务器上的图片需要大约20分钟才能解放(在此时间过去之前我无法删除它们)

我如何进行

这是我的网络服务上的方法,允许我浏览图片并将其转入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分钟,或者让我的老板重新启动服务,这是不可能的。

  3. 问题

    无法使用using块正确处理和关闭流,如何在应用程序/ Web服务环境中执行此操作?

    我做错了什么或错过了重要的事情吗?

1 个答案:

答案 0 :(得分:3)

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

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

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