Kennwortfeld ist leer, wenn ein NetworkCredential-Objekt beim WCF-Dienst deserialisiert wird
Dieser Artikel hilft Ihnen beim Umgehen des Problems, dass das Kennwortfeld leer ist, wenn Sie ein Objekt deserialisieren, NetworkCredential das als Parameter an einen wcf-Dienstvorgang (Windows Communication Foundation) übergeben wird.
Ursprüngliche Produktversion: Microsoft .NET Framework 4.5
Ursprüngliche KB-Nummer: 3021166
Problembeschreibung
Wenn Sie ein Objekt deserialisieren, NetworkCredential das als Parameter an einen WCF-Dienstvorgang übergeben wurde, stellen Sie fest, dass das Kennwortfeld leer ist.
Beispielsweise ist ein WCF-Vertrag wie folgt definiert:
[ServiceContract] public interface IService
{
[OperationContract] string GetData(NetworkCredential myCredential);
}
Wenn der Vorgang von einem Client aufgerufen wird, der GetData eine Zeichenfolge NetworkCredential übergibt, ist der Wert myCredential.Password leer.
Ursache
Es handelt sich um ein bekanntes Problem, das in .NET Framework 4.0 eingeführt wurde. Das Problem tritt auf, wenn ein neuer SecurePassword Eigenschaftswert hinzugefügt NetworkCredential wird. Diese Eigenschaft überschreibt die ursprüngliche Kennwortzeichenfolge, wenn das NetworkCredential Objekt dienstseitig deserialisiert wird.
Problemumgehung
Um dieses Problem zu umgehen, übergeben Sie den Benutzernamen und das Kennwort als Zeichenfolgen, und erstellen Sie dann ein NetworkCredential Objekt beim Dienst.