首页 文章

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

提问于
浏览
1

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

    您需要执行某种形式的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名称的类 .

  • 0

    您必须将[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;
     }
    }
    
  • 0

    对不起我的英语:)我不确定我是否理解但可能是指列表中包含的对象,在这种情况下是Person类...尝试使用属性[DataContract]和他的属性装饰你的Person类属性[DataMember]:Ex .

    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

相关问题