我有一个Windows服务,我在其中创建一个对象列表,我想将此列表传递给我的Windows服务。
首先,我有两个人和人。 Person只描述了Person和Persons列出的Person对象。然后我想将此列表传递给我的wcf服务,但是我收到一个错误,因为我没有这个列表的DataContract。这两个类在我的Windows服务中。
如何为这些类提供DataContract,然后传递列表?
我找不到任何关于在wcf服务中实现外部类的信息。
WindowsService
人
public class Person()
{
public string Age{get; set;}
public string Path{get; set;}
public Person(string age, string path)
{
this.Age = age;
this.Path = path;
}
}
-Persons -
public class Persons()
{
private List<Person> personlist;
public Persons()
{
personlist = new List<Person>();
}
}
WCFService
WindowsServiceMethod wsm = new WindowsServiceMethod(); //Just imagine a method in my windows service
public List<Person> GetPerson(string path)
{
List<Person> personlist = wsm.GetProjects(path);
}
答案 0 :(得分:0)
您需要做某种形式的IPC或RPC,我个人只需在您的Windows服务中创建一个公开Named-Pipes端点的端点,这样就可以让您从您的WCF SOA端点。
WCF named pipe minimal example
是的,我说在Windows服务端嵌入了这项服务。
您的POCO课程可以是数据交换或可序列化。我在你的代码中没有看到它。
首先应将Person(s)类标记为DataContract
并将属性标记为DataMembers
但是您必须在WCF端具有一个具有SAME DataContract名称的类。 DataContract类必须存在于两个应用程序域中,它们不必是相同的实际类,但它们必须具有相同的DataContract名称。
但是,如果您从两个项目中引用包含DataContract类的程序集,那么您应该没问题。
创建一个包含DataContracts的程序集(如果可能),并从两个项目中引用此单个程序集。如果这是太多的工作,那么只需在两者中创建一个DataContract(类名可以是不同的),同样重要的是有一个类在接收端和发送端都有DataContract的名称。
答案 1 :(得分:0)
您必须将[DataContract]属性添加到person类,并将[DataMember]添加到要公开的person类的子属性中:
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
if (tst.IsInvalidTime(new DateTime(2016, 03, 27, 2, 30, 0)))
Console.Write("Invalid time");
答案 2 :(得分:0)
抱歉我的英文:) 我不确定我是否理解但可能是指列表中包含的对象,在这种情况下是Person类...... 尝试使用属性[DataContract]装饰Person类,使用属性[DataMember]装饰他的属性: 实施例
using System.Runtime.Serialization;
[DataContract]
public class Person()
{
[DataMember]
public string Age{get; set;}
[DataMember]
public string Path{get; set;}
public Person(string age, string path)
{
this.Age = age;
this.Path = path;
}
}