将数组列表传递给WCF应用程序

时间:2011-03-24 15:07:21

标签: web-services wcf

我是WCF的新手。 我的情况是Error while passing ArrayList

当我试图传递数组列表时,它会给出错误。 请看看图像。

ICommissionService定义

[GeneratedCode("System.ServiceModel", "4.0.0.0")]
[ServiceContract(ConfigurationName = "FPCommission.ICommissionService")]
public interface ICommissionService
{
   [OperationContract(Action = "http://tempuri.org/ICommissionService/GetCommisionResponse",
                      ReplyAction = "http://tempuri.org/ICommissionService/GetCommisionResponseResponse")]
   object[] GetCommisionResponse(object[] loc_);
}

我仍然没有得到解决方案。

2 个答案:

答案 0 :(得分:0)

当您生成服务引用时,您应该将CollectionType设置为System.Collections.Arraylist - 如果您使用它在高级部分中的UI,如果您使用svcutil.exe它是/ ct开关

MSDN上的Collections in Data Contracts中有更多信息

答案 1 :(得分:0)

此行是问题,来自服务:

object[] GetCommisionResponse(object[] loc_);

你告诉WCF的是你将要返回一个Object数组。因此,客户端希望获得一个Object数组。那当然不是你实际给它的。

子类在WCF中的工作方式不同于它们在别处工作的方式。您必须在服务中明确定义您要返回的内容,因为客户端必须知道期望的内容并为其创建类。

因此,如果您实际上正在返回一个Flight数组,请将其更改为:

Flight[] GetCommisionResponse(object[] loc_);

但如果您要返回某些内容及其自身的子类,则必须使用KnownType attribute

[KnownType(typeof(FlightSubClass))]
Flight[] GetCommisionResponse(object[] loc_);

您可以使用ServiceKnownType在界面上执行相同操作,只需执行一次。