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)]