将对象列表从Windows服务传递给wcf服务

时间:2016-01-13 14:29:28

标签: c# .net wcf service

我有一个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 个答案:

答案 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;
 }
}

Using Data Contracts