我有一个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);
}
3 回答
您需要执行某种形式的IPC或RPC,我个人只需在您的Windows服务中创建一个公开Named-Pipes endpoints 的 endpoints ,然后这将允许您从WCF SOA endpoints 与它进行通信 .
WCF named pipe minimal example
是的,我说在Windows服务端嵌入了这项服务 .
您的POCO类可以是数据交换或可序列化 . 我在你的代码中没有看到 .
这是你应该做的:
您应该首先将Person(s)类标记为
DataContract
并将属性标记为DataMembers
但是您必须在WCF端具有带有SAME DataContract名称的类 . DataContract类必须存在于两个应用程序域中,它们不必是相同的实际类,但它们必须具有相同的DataContract名称 .但是,如果您从两个项目中引用包含DataContract类的程序集,那么您应该没问题 .
建议:
创建一个包含DataContracts的程序集(如果可能),并从两个项目中引用此单个程序集 . 如果这是太多的工作,那么只需在两者中创建一个DataContract(类名可以是不同的),同样重要的是在接收端和发送端都有一个具有DataContract名称的类 .
您必须将[DataContract]属性添加到person类,并将[DataMember]添加到要公开的person类的子属性:
对不起我的英语:)我不确定我是否理解但可能是指列表中包含的对象,在这种情况下是Person类...尝试使用属性[DataContract]和他的属性装饰你的Person类属性[DataMember]:Ex .
Using Data Contracts