C# WCF:客户端发送值,但服务器接收空字符串
服务器端似乎无法接收传递的值,requestVersion.Ping为空C# WCF:客户端发送值,但服务器接收空字符串,c#,wcf,C#,Wcf,服务器端似乎无法接收传递的值,requestVersion.Ping为空 namespace Communication { public class DataForRequestVersion { public string Ping = ""; } public class DataForResponseVersion { public string Pong =
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
的引用来查找该属性。