2011-08-22 57 views
1

它看起來像serverside不能接收傳遞的值,requestVersion.Ping爲空。WCF:客戶端發送值但服務器收到空字符串

namespace Communication 
    { 
     public class DataForRequestVersion 
     { 
      public string Ping = ""; 
     } 

     public class DataForResponseVersion 
     { 
      public string Pong = ""; 
      public string Version = ""; 
     } 
    } 

    [ServiceContract] 
    public interface IService 
    {  
     [OperationContract] 
     Communication.DataForResponseVersion Version(Communication.DataForRequestVersion requestVersion); 

    } 

    //Server 
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
    public class ServiceImplementation : WCFSimple.Contract.IService 
    { 
     public Communication.DataForResponseVersion Version(Communication.DataForRequestVersion requestVersion) 
     { 

      //Here requestVersion.Ping is EMPTY 

      Communication.DataForResponseVersion responseVersion = new Communication.DataForResponseVersion(); 
      responseVersion.Pong = requestVersion.Ping; 
      responseVersion.Version = "MyApp v" + Settings.version; 

      return responseVersion; 
     } 

    } 

    //Client makes a request here  
    Communication.DataForRequestVersion requestVersion = new Communication.DataForRequestVersion(); 
    requestVersion.Ping = DateTime.Now.ToString(Settings.DayTimePreciseFormat);  

    //Here requestVersion.Ping has a value 

    Communication.DataForResponseVersion responseVersion = 
     Service.Version(requestVersion); 

我錯過了什麼?

UPDATE

我的應用程序工作得很好,雙方通過傳遞自定義數據類沒有任何問題溝通。然而,我試圖修改測試客戶端哪一個只發送 - 接收當前時間爲字符串,並使其參數有點複雜;從字符串到自定義數據類。主解決方案的應用程序可以發送版本請求並接收答案。所以我認爲我的小測試客戶端遇到了問題。

My debug scren

這裏是pastebin code

月2日更新:

有些主持人不允許我來回答我的問題,我不知道爲什麼,我發現了一個非常類似的問題,這個人也回答了他自己的問題。下次我幫他人解釋原因;我用命名空間,而不是創建 ......我定:

//namespace Communication 
public class Communication 
+2

另外...公共領域不被大量推薦...屬性將是更可取; –

回答

1

您需要用[DataContract]屬性標記您的請求(和響應)類,以及它們與[DataMember]屬性屬性:

[DataContract] 
public class DataForRequestVersion 
{ 
    [DataMember] 
    public string Ping = ""; 
} 
+0

奇怪,但我的應用程序。沒有[DataContract]屬性,其他服務也可以工作。 –

+0

請確保您具有對「System.Runtime.Serialization.dll」的引用以查找該屬性。 – dlev

1

嘗試使用[DataContract]你的數據... ...類和[DataMember]在各自的領域...

0

將DataForRequestVersion DataForResponseVersion類中的字段更改爲屬性。默認情況下,DatacontractSerializer將序列化公共屬性。

相關問題