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

时间:2011-08-22 08:34:05

标签: c# wcf

看起来serveride无法接收传递的值,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);

我错过了什么?

更新

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

My debug scren

以下是pastebin code

第二次更新:

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

//namespace Communication
public class Communication

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

尝试在您的数据...类上使用[DataContract] ...并在其字段上使用[DataMember] ...

答案 2 :(得分:0)

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