从wcf服务返回一类List对象,并在客户端上分配它

时间:2014-02-11 16:39:43

标签: c# wcf

如何将带有List<T>对象的类从wcf服务返回给客户端?
有人能告诉我一个如何返回带有一些列表对象的类并将其分配给客户端的示例吗?当我尝试将具有Listobjects的类分配给表单上的局部变量时,我在客户端上收到此错误

Error:  Cannot implicitly convert type 'System.Collections.Generic.List<TesterWCFService.ServiceRef.TypeCode>' to 'System.Collections.Generic.List<Project1.TypeCode>'  

代码:

public interface ICodesService 
{
    [OperationContract]
    CodesList LoadCodeData();
}

[Serializable]
[DataContract]
public class CodesList 
{
    [DataMember]
    public List<TypeCode> TypeCodes{ get; set; }
    [DataMember]
    public List<TypeCode1> TypeCodes1{ get; set; }
}

LoadCodes.svc

public class LoadCodesService : ICodesService 
{
    CodesList _AllCodes = new Codes();
    public CodesList LoadCodeData() {
        using (CodeEntities _codes = new CodeEntities()) {
            _AllCodes.TypeCodes= _codes.TypeCode.ToList();
            _AllCodes.TypeCodes1= _codes.TypeCodes.ToList();
        }
        return _AllCodes
    }
}

在客户端:

public class Codes 
{
     public List<TypeCode> TypeCodes{ get; set; }
     public List<TypeCode1> TypeCodes1{ get; set; }
}

这与ICodesService上的CodesList相同。我在放置ICodesService和客户端时声明它。我想将它加载到Web服务上并在客户端上分配

private void button1_Click(object sender, EventArgs e) 
{
    public Codes _codesInProxy = new Codes();
    LoadCodesServiceReference.CodesServiceClient proxy =  new LoadCodesServiceReference.CodesServiceClient();
    proxy.CodesList _codesList;
    _codesList= proxy.LoadCodeData();//this one returns the codeslist from the service
    _codesInProxy.TypeCodes = codesList.TypeCodes.ToList() 
    // This one gives an error 
    //Now I would like assign it to the class on the client and use it
}

Error:  Cannot implicitly convert type 'System.Collections.Generic.List<TesterWCFService.ServiceRef.TypeCode>' to 'System.Collections.Generic.List<Project1.TypeCode>'  

2 个答案:

答案 0 :(得分:1)

似乎问题是你有两个不同的定义用于存储客户端的调用结果 - 一个是通过添加WCF服务引用(proxy.CodesList)生成的,另一个是手动定义的(Codes)。

您不需要再次在客户端重新定义服务器端类。如果添加服务引用,则将自动生成所有数据类型。只需更改客户端,即可在任何地方使用proxy.CodesList

答案 1 :(得分:1)

您可以/应该使用与在WCF服务中创建的对象引用相同的对象引用。

wcf服务将公开接口中定义的对象,您应该创建客户端对象,作为WCF对象的引用。

添加服务引用时,Visual Studio已经创建了所有空类结构,您只需使用它们即可。

伪代码:

New var as wcfserviceReferenceInstance.object