检查实际的空值是否传递给wcf中的数据库

时间:2016-12-21 10:53:34

标签: wcf datamember

默认情况下,wcf服务的参数对象中的所有数据成员值都将为null。但是如何检查实际的空值是否从客户端传递到我的服务。

换句话说,如果客户端实际上将包含空值的任何值传递给datamembers,那么我必须执行一些数据库操作。所以我需要区分默认空值和客户端传递的实际空值。请指教。

2 个答案:

答案 0 :(得分:0)

我不确定这是你问过的,但你可以实现类似的东西以便无效检查。

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

答案 1 :(得分:0)

我认为唯一的解决方案是在此模式下有额外的数据成员:

class Contract
{
  [DataMember]
  private string _field;

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

  [DataMember]
  public string FieldSpecified;
}

这是XML序列化使用的模式。