2013-02-06 77 views
3

這是什麼WCF服務是我想要從用戶同時獲得5個值,並將它們的前兩個值的添加的響應發送爲AddedResult,將減法結果和第三個值作爲SubtractedResult,將SubtractedResult和第四個值相乘作爲將multipliedResult和5th值分別乘以DividedResult。如何在一個WCF請求中發送多個返回值?

我知道這看起來沒有意義,但我想用這些做一些預先測試,但我是新來的WCF任何人誰可以幫助將真正被讚賞。

public interface IService1 
{ 

    [OperationContract] 
    string GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5); 


    // TODO: Add your service operations here 
} 


public class Service1 : IService1 
{ 

    public int GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5) 
    { 
     int AddedResult; 
     int SubtractedResult; 
     int MultipliedResult; 
     int DividedResult; 

     AddedResult = (value1 + value2); 
     SubtractedResult = (AddedResult - value3); 
     MultipliedResult = (SubtractedResult - value4); 
     DividedResult =(MultipliedResult/value5); 

     return AddedResult; 
     return SubtractedResult; 
     return MultipliedResult; 
     return DividedResult; 
    } 


} 

如何在同一時間返回4個值?

+0

我編輯了你的帖子,讓你的問題更加清晰。如果我的解讀錯誤,請隨時更改。 –

回答

7

您需要製作一個DataContract並返回該對象。

[ServiceContract()] 
interface IService1 
{ 
    [OperationContract] 
    ReturnValue GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5); 
} 


public class Service1 : IService1 
{ 
    public ReturnValue GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5) 
    { 
     int AddedResult; 
     int SubtractedResult; 
     int MultipliedResult; 
     int DividedResult; 

     AddedResult = (value1 + value2); 
     SubtractedResult = (AddedResult - value3); 
     MultipliedResult = (SubtractedResult - value4); 
     DividedResult =(MultipliedResult/value5); 

     var returnValue = new ReturnValue(AddedResult, SubtractedResult, MultipliedResult,DividedResult); 

     return returnValue ; 
    } 
} 

[DataContract] 
public class ReturnValue 
{ 
    public ReturnValue(int addedResult, int subtractedResult, int multipliedResult, int dividedResult) 
    { 
     AddedResult = addedResult; 
     SubtractedResult = subtractedResult; 
     MultipliedResult = multipliedResult; 
     DividedResult = dividedResult; 
    } 

    [DataMember] 
    public int AddedResult {get; set;} 

    [DataMember] 
    public int SubtractedResult {get; set;} 

    [DataMember] 
    public int MultipliedResult {get; set;} 

    [DataMember] 
    public int DividedResult {get; set;} 
} 

在您的客戶端是ReturnValue類將生成的客戶端代理相同的代碼自動生成(無論是內置於Visual Studio或svcutil.exe工具)

這裏是DataContractsMSDN Page

+0

嗨斯科特一切都很好,您的答案感謝您的答覆,但我不知道如果我犯了錯誤結果爲null什麼都沒有出現。 – nzdev

+1

我更新了我的答案,您是否爲每個項目添加了[[DataMember]](添加它們後需要重新創建代理類)?另外,如果您在使用調試器的同時執行步驟,您確定在發送應答之前「returnValue」的值不爲空,或者在發送方不爲null,而在接收方爲空? –

+0

得到它斯科特我發現我的錯誤非常感謝你回答。 – nzdev

2

您應該創建一個結構並在相同的調用中返回它們。

public class Service1 : IService1 
{ 

public int GetValuesForCalculation(int value1, int value2, int value3, int value4, int value5) 
{ 
    int AddedResult; 
    int SubtractedResult; 
    int MultipliedResult; 
    int DividedResult; 

    AddedResult = (value1 + value2); 
    SubtractedResult = (AddedResult - value3); 
    MultipliedResult = (SubtractedResult - value4); 
    DividedResult =(MultipliedResult/value5); 

    CallResponse myResponse = new CallREsponse {AddResult = AddedResult, 
       SubtractResult = SubtractedResult, 
       MultiplyResult = MultipliedResult, 
       DivideResult = DividedResult}; 
    return myResponse; 
} 


} 
public struct CallResponse 
{ 
int AddResult; 
    int SubtractResult; 
    int MultiplyResult; 
    int DivideResult; 
} 
+1

你可以使用一個結構體來返回WCF的值,而不需要DataContract或使它可序列化?從未知道。 –

+0

我相信你應該可以。我之前通過設置任何可序列化的屬性或數據約定屬性來完成它。指定數據合同的唯一真正原因是您希望完全控制返回的內容。否則,它會自動執行 –

+0

您好brian它說,新的callresponse內的參數由於保護級別而無法訪問,但嘿要回復 – nzdev

相關問題