2013-11-10 34 views
2

我已經在我發送給客戶端的服務器端的對象類型中存儲了一個類對象。如何從客戶端的對象類型檢索類對象的數據成員的數據?我正在使用WCF進行通信。我對這個概念很陌生。從c#中的對象類型獲取數據

Service Contract 

    [ServiceContract] 
    public interface IRCommService 
    { 
    [OperationContract] 
    result sendMessage(string command, object data); 
    } 

    [DataContract] 
    public class result 
    { 
    [DataMember] 
    public List<string> results { get; set; } 
    } 


[service behavior] 
public result sendMessage(string command, object data) 
    { 
     List<string> l = new List<string>(); 
     Console.WriteLine("Received"); 
     return new result { results = l }; 
    } 
+2

需要更多信息,它是以XML還是JSON形式返回給客戶端?發佈迄今爲止所有的代碼,對於提供解決方案的人來說,這會大有幫助。 –

+0

我有一個數據成員int a的簡單類。我正在創建這個類的對象(a = 10)。我想發送這個類對象到客戶端,並得到這個值10.我將類對象複製到一個對象類型。如果這不是正確的方法,請告訴我如何做到這一點。 – user2276352

+0

發佈您的WCF代碼。 –

回答

1

更好地使用自定義請求對象,而不是使用Object數據類型。請求對象類應該在客戶端和客戶端都是公用的,然後您可以填充請求並從中獲取所需的結果服務器。

您的解決方案層次結構最好如下。在普通的裝配

enter image description here

在普通的裝配
namespace ServerProj 
{ 
    using System.ServiceModel; 
    using Common; 

    [ServiceContract] 
    public interface IRCommService 
    { 
     [OperationContract] 
     Result SendMessage(string command, CustomRequest data); 
    } 
} 

namespace ServerProj 
{ 
    using System.Collections.Generic; 
    using Common; 

    public class RCommService : IRCommService 
    { 
     public Result SendMessage(string command, CustomRequest data) 
     { // You can get the value from here 
      int value = data.MyValue; 

      Result result = new Result(); 
      List<string> list = new List<string>(); 
      list.Add("Sample"); 
      result.Rsults = list; 

      return result; 
     } 
    } 
} 

Request類

namespace Common 
{ 
    using System.Runtime.Serialization; 

    [DataContract] 
    public class CustomRequest 
    { 
     [DataMember] 
     public int MyValue { get; set; } 
    } 
} 

Response類

namespace Common 
{ 
    using System.Collections.Generic; 
    using System.Runtime.Serialization; 

    [DataContract] 
    public class Result 
    { 
     [DataMember] 
     public List<string> Rsults { get; set; } 
    } 
} 

然後,只需添加作爲在客戶端的服務引用。

private void button1_Click(object sender, EventArgs e) 
     { 
      ServiceReference1.RCommServiceClient service = new ServiceReference1.RCommServiceClient(); 
      CustomRequest customRequest=new CustomRequest(); 
      customRequest.MyValue = 10; 

      Result result = service.SendMessage("Test", customRequest); 
     } 
1

考慮使用字典,如果你真的需要這麼多的靈活性。也就是說,最好有10個具有不同簽名的服務方法,而不是在一個服務方法中處理10個不同的輸入。

另外,傳遞自定義類是常見的做法。所以,如果你的對象有10個不同的東西,只需要創建一個有10個屬性的類並設置你需要的任何一個。