我是WCF的新手。 我的情况是。
当我试图传递数组列表时,它会给出错误。 请看看图像。
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_);
}
我仍然没有得到解决方案。
答案 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在界面上执行相同操作,只需执行一次。