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