默认情况下,wcf服务的参数对象中的所有数据成员值都将为null。但是如何检查实际的空值是否从客户端传递到我的服务。
换句话说,如果客户端实际上将包含空值的任何值传递给datamembers,那么我必须执行一些数据库操作。所以我需要区分默认空值和客户端传递的实际空值。请指教。
答案 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序列化使用的模式。