2011-10-06 43 views
0

在我的MVVM Silverlight應用程序中,我需要調用域服務函數以從存儲過程中獲取sql查詢結果和一些'OUTPUT'數據。我弄清楚如何獲取域服務端的數據,但是在客戶端,我不知道如何從函數中獲取'OUTPUT'參數,因爲Silverlight是異步調用。以下是我在域服務上的功能,我需要從異步調用中獲取兩個返回的OUTPUT參數。獲取RIA WCF域服務返回'OUTPUT'參數

感謝您的任何幫助。

CK

[Invoke] 
    public IEnumerable<sp_Inquiry_Result> GetResultAsync(string ID, 
                  out string sDescription, 
                  out float fvariance) 
    { 

     // Declare ObjectParameter object to store output param 
     ObjectParameter WorkcenterDescription = new ObjectParameter("@Description", typeof(string));   
     ObjectParameter Variance = new ObjectParameter("@Variance", typeof(float)); 

     // Call stored procedure, passing in Object Parameter 
     ObjectResult <sp_WorkcenterCostInquiry_Result> o = this.ObjectContext.sp_Inquiry(
      workcenterID, 
      Variance); 

     // ObjectParameter will have output param value from stored proc 
     sDescription = Convert.ToString(Description.Value); 
     fvariance = (float)Convert.ToDouble(Variance.Value); 

     return o.ToList().AsEnumerable(); 

    } 

回答

1

RIA服務DOS不支持out參數。他們對異步調用沒有任何意義(服務調用的幕後任何結果都被忽略)。

標準方法是創建一個包含多個屬性的結果對象,並返回它。

在你的具體的例子,將被包括這些屬性的新返回類型:

  • sp_Inquiry_Result
  • sDescription
  • fvariance
+0

非常感謝你的偉大的答案。現在我嘗試使用「VS2010」來添加函數導入,其結果是創建了列信息複雜集合數據類型,但是我沒有在存儲的proc列信息列表中看到「OUTPUT」參數。返回的查詢結果是一個列表,OUTPUT參數是單個字符串和一個浮點值。你知道如何將這兩個參數添加到vs2010 ria wcf web項目的EDM模型中嗎?再次感謝。 –

+0

不要試圖將它們添加到EDM模型中,除非它們實際上是數據的一部分。創建您自己的POCO和您自己的RIA方法,返回1個條目的IEnumerable。 –