将对象列表从windows服务传递到wcf服务
本文关键字:服务 wcf windows 对象 列表 | 更新日期: 2023-09-27 18:30:04
我有一个windows服务,在那里我创建了一个对象列表,我想把这个列表传递给我的windows服务。
所以首先我有两个类Person和Persons。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;
}
}
-人员-
public class Persons()
{
private List<Person> personlist;
public Persons()
{
personlist = new List<Person>();
}
}
WCF服务
WindowsServiceMethod wsm = new WindowsServiceMethod(); //Just imagine a method in my windows service
public List<Person> GetPerson(string path)
{
List<Person> personlist = wsm.GetProjects(path);
}
您需要执行某种形式的IPC或RPC,就我个人而言,我只需在您的Windows服务中创建一个公开命名管道端点的端点,这样您就可以从WCF SOA端点与之通信。
WCF命名管道最小示例
是的,我说过把这个服务嵌入你的windows服务端。
您的POCO类可以是数据契约,也可以是可序列化的。我在你的代码中看不到这一点。
以下是您应该做的:
您应该首先将Person类标记为DataContract
,并将属性标记为DataMembers
,但WCF端也必须有一个具有相同DataContract名称的类。DataContract类必须存在于两个应用程序域中,它们不必是相同的实际类,但必须具有相同的DataContract名称。
但是,如果您引用的程序集包含两个项目中的DataContract类,那么您应该可以。
建议:
创建包含DataContracts的单个程序集(如果可能),并从两个项目中引用此单个程序集。如果工作量太大,那么只需在两者中创建一个DataContract(类名可能不同),同样重要的是,在接收端和发送端都有一个具有DataContract名称的类。
您必须将[DataContract]属性添加到person类,并将[DataMember]添加到要公开的person类的子属性:
[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;
}
}
对不起我的英语:)我不确定我是否理解,但可能是指列表中包含的对象,在这种情况下是Person类。。。尝试用属性[DataContract]装饰Person类,用属性[DateMember]装饰他的属性:示例
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;
}
}
使用数据合约