看起来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);
我错过了什么?
更新
我的应用程序运行良好,双方通过传递自定义数据类进行通信,没有任何问题。但是我试图修改一个只发送的测试客户端 - 接收当前时间作为字符串并使其参数有点复杂;从字符串到自定义数据类。主解决方案的应用程序可以发送版本请求并接收答案。所以我觉得我的小测试客户遇到了问题。
以下是pastebin code:
第二次更新:
有些主持人不允许我回答我自己的问题,我不知道为什么,我发现了一个非常相似的问题而且这个家伙也回答了他自己的问题。下次我解释原因时帮助别人;我使用命名空间而不是创建类 ...我修复了:
//namespace Communication
public class Communication
答案 0 :(得分:1)
您需要使用[DataContract]
属性标记您的请求(和响应)类,并使用[DataMember]
属性标记其属性:
[DataContract]
public class DataForRequestVersion
{
[DataMember]
public string Ping = "";
}
答案 1 :(得分:1)
尝试在您的数据...类上使用[DataContract]
...并在其字段上使用[DataMember]
...
答案 2 :(得分:0)
将DataForRequestVersion DataForResponseVersion类中的字段更改为属性。默认情况下,DatacontractSerializer将序列化公共属性。