Ich habe die folgenden DataContract
definiert, die IDisposable
implementiert:Warum wird Dispose bei DataContract aufgerufen, obwohl der Dienst sich noch darauf bezieht?
[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);
}
}
Und ich rufe die folgende Service-Methode eine Instanz des obigen Daten Vertrages vorbei:
[OperationContract]
[ServiceKnownType(typeof(RegularFileMetadata))]
Guid BeginUpload(FileMetadataBase metadata);
Bei der Implementierung von BeginUpload
, habe ich einfach Speichern Metadaten in einem Wörterbuch wie:
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 ;
}
Meine Frage ist, sofort nach der Rückkehr von dieser Methode, warum Dispose()
aufgerufen wird, obwohl ich die Instanz im Wörterbuch _Dict
gespeichert habe?
Ich habe festgestellt, dass Dispose()
Methode auf dem gleichen Instanz aufgerufen wird, die ich in meinem Wörterbuch gespeichert haben, als _Disposed
wird true
für die Objekt gespeichert, das heißt _Dict[sessionId]._Disposed
wird true
!
Der Service Verhalten meines Dienstes eingestellt ist, wie:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
Sind Sie ssure dass Dispose (..) auf der aufgerufen wird ** selbe ** Instanz, die du erstellt hast? Ich meine * kann sein * es wurde eine andere Instanz der Klasse erstellt und Dispose (..) wurde an * dieser * angerufen. Überprüfen Sie * Hashcode * der Instanz, die Sie erhalten Dispose (..) auf ... – Tigran
@Tigran: Ja ... – Nawaz
@Tigran: Ich aktualisierte meine Frage mit: * "Ich habe überprüft, dass Dispose() -Methode auf der aufgerufen wird dieselbe Instanz, die ich in meinem Wörterbuch gespeichert habe, da _Disposed für das gespeicherte Objekt wahr wird. "* – Nawaz