我已经定义了下面这个实现了IDisposable
的DataContract
:
[DataContract]
public class RegularFileMetadata : FileMetadataBase, IDisposable
{
bool _Disposed = false; //note this!
//...
protected virtual void Dispose(bool disposing)
{
if (!_Disposed)
{
//...
_Disposed = true; //note this too!
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
我调用以下服务方法,传递上述数据契约的实例:
[OperationContract]
[ServiceKnownType(typeof(RegularFileMetadata))]
Guid BeginUpload(FileMetadataBase metadata);
在BeginUpload
的实现中,我只是将元数据保存在字典中,如下所示:
Dictionary<Guid, RegularFileMetadata> _Dict;
public Guid BeginUpload(FileMetadataBase fileMetadata)
{
//...
var metadata = fileMetadata as RegularFileMetadata;
Guid sessionId = Guid.NewGuid();
_Dict.Add(sessionId, metadata); //metadata SAVED!
return sessionId ;
}
我的问题是,为什么即使我已经将实例保存在字典_Dict
中,从这个方法返回后立即调用了Dispose()
方法?
我已验证Dispose()
方法被调用的是我保存在字典中的同一个实例,因为保存的对象的_Disposed
变为true
,即_Dict[sessionId]._Disposed
变成了true
!
我的服务行为设置为:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]