我正在开发一个需要访问服务器图像的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
我无法关闭服务上的stream
,因为它阻止我稍后在客户端上使用它进行写入
我无法在本地对此进行测试,因为当本地服务未在网上发布时,图片会立即释放(没问题)。这迫使我在每次测试之间等待20分钟,或者让我的老板重新启动服务,这是不可能的。
无法使用using
块正确处理和关闭流,如何在应用程序/ Web服务环境中执行此操作?
我做错了什么或错过了重要的事情吗?
答案 0 :(得分:3)
客户端上的对象独立于服务器进程中的任何对象。关闭客户端上的任何内容都不会影响服务器。 rcv(i).Dispose()
什么也没做。
您的资源泄漏是bmp
。实际上,您可能应该使用File.ReadAllBytes
。为什么要对图片进行重新编码?
20分钟超时可能是IIS关闭空闲服务器。