2016-12-21 5 views
0

Par défaut, toutes les valeurs de membre de données dans un objet de paramètre au service wcf seront nulles. Mais comment vérifier si la valeur nulle réelle a été transmise du client à mon service. En d'autres termes, si le client a effectivement transmis des valeurs, y compris des valeurs nulles, aux datamembres, alors je dois effectuer certaines opérations DB. J'ai donc besoin de faire la distinction entre les valeurs nulles par défaut et les valeurs nulles réelles passées par le client. Veuillez nous conseillerVérifier si la valeur null réelle a été transmise à un datamember dans wcf

Répondre

0

Je ne suis pas sûr que ce soit ce que vous avez demandé, mais vous pouvez implémenter quelque chose comme ça afin de vérifier null.

 private bool HasNull(object webServiceInput, string[] optionalParameters = null) 
    { 
     if (ReferenceEquals(null, webServiceInput)) 
      return false; 

     if (optionalParameters == null) 
      optionalParameters = new string[0]; 

     var binding = BindingFlags.Instance | BindingFlags.Public; 
     var properties = webServiceInput.GetType().GetProperties(binding); 
     foreach (var property in properties) 
     { 
      if (!property.CanRead) 
       continue; 

      if (property.PropertyType.IsValueType) 
       continue; 

      if (optionalParameters.Contains(property.Name)) 
       continue; 

      var value = property.GetValue(webServiceInput); 
      if (ReferenceEquals(null, value)) 
       return false; 
     } 

     return true; 
    } 
0

Je pense que la seule solution est d'avoir des membres de données supplémentaires suivant ce modèle:

class Contract 
{ 
    [DataMember] 
    private string _field; 

    public string Field 
    { 
    get { 
     return _field; 
    } 
    set { 
     _field = value; 
     FieldSpecified = true; 
    } 
    } 

    [DataMember] 
    public string FieldSpecified; 
} 

C'est le modèle qui sérialisation XML utilise.