【发布时间】:2014-02-12 19:27:28
【问题描述】:
我的团队正在开发 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));
上面的代码显示了一条消息,表明我的服务返回的整数为空,而不是我分配给它的 5。但是,GetMyName 确实为我的字符串返回了正确的值,它显示为我的消息框的标题。
为什么服务似乎正在接收空值?
【问题讨论】:
-
您找到解决问题的方法了吗?
-
是的。将 [OperationBehavior] 更改为 [OperationBehavior(Impersonation = ImpersonationOption.Required)] 似乎可以正常工作。
标签: c# wcf service null datacontract