2011-12-16 55 views
0

我想寫一個WCF管道服務。我的一個服務方法將收到一個object[]作爲參數並填充它,模擬IDataReaderGetValues方法。但是每當我從客戶端調用這個方法時,我會得到一個完整的null values數組。我也嘗試將object[]參數更改爲ref object[],但沒有任何更改。數組作爲參數傳遞給要填充的WCF服務回來充滿空的

在第一次寫這個問題後,我一直在做一些測試,這是比我第一次雖然更奇怪。漏洞問題似乎發生在客戶端。下面是一些代碼(從客戶端的所有拍攝):

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") 
} 

DatabaseProxy.InstanceGetValues方法是我的服務器的方法,它需要一個ref參數,否則它將返回一個完整的數組null s。通過使用ref修飾符,現在它返回值,但這些值在我的客戶端內消失。任何想法這裏發生了什麼?

+0

你確定Web服務實際上是返回任何值到客戶端? –

+1

你能發佈你的返回值的服務方法嗎?您的服務類實現的服務接口以及用於調用該方法的代碼? – Chris

+0

如果你打算通過ref傳遞值,你必須在任何地方使用ref ...例如,你必須在這裏引用:NewChannel.GetValues(connectionId,readerId,ref values) –

回答

3

編輯

瞎折騰我以前的答案,看着谷歌和其他等問題,與this

上前看來你可以使用裁判,但你必須在你的服務合同正確聲明它供WCF使用。

請參閱部分out和ref參數

在這種情況下,你的服務端的方法應該聲明

public int GetValues(int connectionId, int readerId, ref values) 
0

不完全確定,但99.9%確定ref在WCF中不能像在內存中一樣工作。將數組作爲輸出返回,而不是使用ref參數。

+0

但是'ref'只是在我的服務器內部使用。我的服務器的公共方法(由我的客戶端調用的方法)不使用'ref'。我也嘗試在我的服務器的公共方法中使用'ref',但仍然無法工作。如果我不能以另一種方式解決問題,我將使用該數組作爲返回類型。 – Juan

+0

你正在發送一個數組到服務器的權利?然後你期待在這個調用權之後數組被充滿了數據?這是行不通的。 –

+0

根本不可能? – Juan