C# WCF:客户端发送值,但服务器接收空字符串

C# WCF:客户端发送值,但服务器接收空字符串,c#,wcf,C#,Wcf,服务器端似乎无法接收传递的值,requestVersion.Ping为空 namespace Communication { public class DataForRequestVersion { public string Ping = ""; } public class DataForResponseVersion { public string Pong =

服务器端似乎无法接收传递的值,requestVersion.Ping为空

   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);
我错过了什么

更新

我的应用程序运行得很好,双方通过传递自定义数据类进行通信,没有任何问题。然而,我试图修改测试客户机,它只发送接收当前时间作为字符串,并使其参数有点复杂;从字符串到自定义数据类。主解决方案的应用程序可以发送版本请求并接收响应。所以我想我的小测试客户遇到了问题

以下是:

第二次更新:

有些主持人不允许我回答自己的问题,我不知道为什么,我发现了一个非常类似的问题,那个人也回答了自己的问题。下次我在解释原因时帮助别人;我使用了名称空间而不是创建…我修复了:

//namespace Communication
public class Communication

您需要使用
[DataContract]
属性标记请求(和响应)类,并使用
[DataMember]
属性标记它们的属性:

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

尝试在数据上使用
[DataContract]
…类。。。和
[DataMember]
在其字段上…

将DataForRequestVersion DataForResponseVersion类中的字段更改为属性。默认情况下,DatacontractSerializer将序列化公共属性。

另外。。。公共字段不被大量推荐。。。最好是有房地产;奇怪,但我的应用程序。没有[DataContract]属性,其他服务也可以工作。请确保您有一个对
System.Runtime.Serialization.dll
的引用来查找该属性。