我正在尝试编写WCF管道服务。我的一项服务方法会收到一个object[]
作为参数并填写,模仿IDataReader
的{{1}}方法。但每当我从我的客户端调用此方法时,我会得到一个完整的GetValues
值数组。我还尝试将null
参数更改为object[]
,但没有任何变化。
在第一次写这个问题之后我一直在做一些测试,但这比我第一次更奇怪。洞问题似乎发生在客户方面。这是一些代码(全部来自客户端):
ref object[]
这是object[] values = new object[reader.FieldCount];
// values is filled up with null's
reader.GetValues(values);
// values is again filled up with null's (see code bellow)
,由上面的代码调用:
GetValues
public int GetValues(object[] values)
{
// values is filled out with null's, naturally
return DatabaseProxy.Instance.GetValues(_ConnectionId, _ReaderId, ref values);
// values has content here! (values[0] == "hello this is a string")
}
中的GetValues
方法是我的服务器方法,它采用DatabaseProxy.Instance
参数,否则会返回一个满ref
秒的数组。通过使用null
修饰符,现在它确实返回值,但随后这些值在我的客户端内消失。知道这里发生了什么吗?
答案 0 :(得分:3)
修改强>
废弃我之前的回答并查看了谷歌和其他SO问题并提出了this
似乎您可以使用ref,但您必须在服务合同中正确声明它以供WCF使用。
请参阅 Out和Ref Parameters
部分在这种情况下,您的服务方法应该被声明
public int GetValues(int connectionId, int readerId, ref values)
答案 1 :(得分:0)
不完全确定,但99.9%确定ref在WCF中不能像在内存中那样工作。将数组作为输出返回,而不是使用ref参数。