Почему Dispose вызывается для DataContract, хотя служба по-прежнему ссылается на него?

Я определил следующий DataContract, который реализуетIDisposable:

[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 ;
}

Мой вопрос: сразу после возврата из этого метода, почему Dispose()вызывается, хотя я сохранил экземпляр в словаре _Dict?

Я проверил, что метод Dispose()вызывается для того же экземпляра , который я сохранил в своем словаре, поскольку _Disposedстановится trueдля сохраненного объекта, т.е. _Dict[sessionId]._Disposed. ] становится true!

Поведение службы моей службы установлено как:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
10
задан Nawaz 9 July 2012 в 06:56
поделиться