我的团队正在开发一个WCF服务来与数据库表进行通信 . 最近,我们注意到如果我们在某些表中插入新记录,整数和布尔值将不会保存到记录中,但字符串可以正常工作 .
服务中接收DataContract类作为参数的函数似乎对其所有非字符串属性都具有空值 .
我已经设置了一个新类来测试它:
[DataContract]
public class MyObject
{
private string _Name;
[DataMember]
public string Name
{
get { return _Name; }
set { _Name = value; }
}
private int? _TestInt;
[DataMember]
public int? TestInt
{
get { return _TestInt; }
set { _TestInt = value; }
}
public MyObject()
{
_Name = "";
_TestInt = 0;
}
}
我已经为我的服务添加了函数,只需返回上面类中属性的值:
[OperationBehavior]
public string GetMyName(MyObject myObject)
{
return myObject.Name;
}
[OperationBehavior]
public int? GetMyTestInt(MyObject myObject)
{
return myObject.TestInt;
}
我已在客户端应用程序上配置了服务引用,以便不在引用的程序集中重用类型 .
这是我用来在客户端上测试的代码:
MyObject record = new MyObject();
record.Name = "This is Me";
record.TestInt = 5;
int? returnValue = _client.GetMyTestInt(record);
string message;
if (returnValue == null)
message = "Integer value is null.";
else
message = "Integer value is " + returnValue.ToString();
MessageBox.Show(message, _client.GetMyName(record));
上面的代码显示了一条消息,表明我的服务返回的整数是null,而不是我分配给它的5 . 但是,GetMyName确实为我的字符串返回了正确的值,该值显示为我的消息框的 Headers .
为什么服务似乎接收空值?
2 回答
您必须将[DataMember]属性添加到支持字段 .
像这样改变你的 Contract :
在DataContract中添加Property属性
[DataMember(IsRequired = true)]