将对象列表从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);
}

将对象列表从windows服务传递到wcf服务

您需要执行某种形式的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;
 }
}

使用数据合约