作为参数传递给要填充的WCF服务的数组返回充满了null

时间:2011-12-16 21:12:11

标签: c# wcf

我正在尝试编写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修饰符,现在它确实返回值,但随后这些值在我的客户端内消失。知道这里发生了什么吗?

2 个答案:

答案 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参数。