通过列表<;T>;作为WCF服务操作的参数

通过列表<;T>;作为WCF服务操作的参数,wcf,list,Wcf,List,我有一份WCF运营合同,如下所示: public void SavePersons(List<Person> list, bool IsSelected) { } public void saveperson(列表,bool IsSelected) { } 我正在向它传递一个强类型的Person对象列表(list)。但是,我在调用服务时收到错误的请求400消息。我做错了什么 我建议您创建一个合同来封装参数,如下所示: public void SavePersons(PersonC

我有一份WCF运营合同,如下所示:

public void SavePersons(List<Person> list, bool IsSelected)
{
}
public void saveperson(列表,bool IsSelected)
{
}

我正在向它传递一个强类型的
Person
对象列表(
list
)。但是,我在调用服务时收到错误的请求400消息。我做错了什么

我建议您创建一个合同来封装参数,如下所示:

public void SavePersons(PersonCollectionContract Request)
{
    ...
}

[DataContract]
public class PersonCollectionContract
{
    [DataContract]
    public List<Person> People { get; set; }

    [DataContract]
    public bool IsSelected { get; set; }
}

[DataContract]
public class Person
{
    ...
}
公共作废储户(PersonCollectionContract请求)
{
...
}
[数据合同]
公共类PersonCollectionContract
{
[数据合同]
公共列表人员{get;set;}
[数据合同]
公共布尔值被选为{get;set;}
}
[数据合同]
公共阶层人士
{
...
}

在将类健康类型的
列表作为参数传递给wcf服务方法时,我遇到了类似的问题。我在wcf服务中创建了一个数据合约,如下所示:

[DataContract]
public class Health
{
  ...
}
在wcf服务类中定义了一个方法,例如:

public string GetData(List<Health> healthValues)
公共字符串GetData(列出HealthValue)
在我的客户端应用程序中,在配置/更新服务时,我遵循以下步骤:

  • 添加/更新URL
  • 在数据类型(高级)下,选择选项,集合类型:System.Collection.Generic.List
最后,我创建了一个列表,并在客户机中添加了如下代码:

List<WcfService.Health> listHealth = new List<WcfService.Health>();
WcfService.Health h = new WcfService.Health();
.
.
listHealth.Add(h);
WcfService.Service1Client s = new WcfService.Service1Client();
string str = s.GetData(listHealth);
List listHealth=new List();
WcfService.Health=新的WcfService.Health();
.
.
添加(h);
WcfService.Service1Client s=新的WcfService.Service1Client();
字符串str=s.GetData(listHealth);

这解决了我的问题,我可以通过wcf服务将数据作为列表发送。

您使用的是哪种绑定?我们肯定需要看到的不仅仅是这一行代码。。。。。服务器端和客户端配置(在
中的任何内容都是一个很好的开始!还有客户端上的代码您如何称呼这种方法您是否用DataContractAttribute
[DataContract]装饰了
Person
?好的,我把事情缩小了一点。WCF服务收到了一个列表,我需要将一个observablecollection转换为一个列表,然后再将它传递给WCF服务。我有一个observablecollection,我需要将它转换为服务所期望的列表。你怎么做?@onkarkarni。使用System.L包含LINQ命名空间
inq;
和do
var list=obsColl.ToList();