在实体中使用IList时,在WCF ChannelFactory生成的客户端代理上获取列表

时间:2011-08-03 11:27:06

标签: wcf

WCF存在一个着名的问题,它将IList作为数组(而不是列表)序列化到客户端。当客户端使用svcutil或Visual Studio IDE为客户端创建服务引用时,也可以应用已知的解决方案。 但是,我们使用ChannelFactory在运行时为客户端生成服务代理。换句话说,我们不使用svcutil和IDE来创建对服务的引用。 在这种情况下,这个问题是否有适当的解决方案?

2 个答案:

答案 0 :(得分:0)

在您的服务界面中,是您的退货类型清单吗?只做了一个简短的测试,

服务器:

class Program
{
    static void Main(string[] args)
    {
        ServiceHost host = new ServiceHost(typeof(TestService), new Uri("http://localhost:1024/TestService"));
        host.Open();
        Console.ReadLine();
    }
}

public class TestService : ITestService
{
    public List<string> GetStrings(string test)
    {
        return new List<string>() {test};
    }
}

[ServiceContract]
public interface ITestService
{
    [OperationContract]
    List<string> GetStrings(string test);
}

客户端

 static void Main(string[] args)
    {
        ChannelFactory<ITestService> factory = new ChannelFactory<ITestService>(new BasicHttpBinding());
        ITestService proxy = factory.CreateChannel(new EndpointAddress(new Uri("http://localhost:1024/TestService")));
        var list = proxy.GetStrings("Test");
    }

列表将是List类型。您是否处理了实施中的任何不同之处?

答案 1 :(得分:0)

听起来你正在尝试做类似于我所描述的事情in my answer to a question on IList with NHibernate & WCF.因为你在服务和客户端之间共享契约集合,所以List deserialization代码也将被共享。我成功地使用了这种技术和ChannelFactory方法,希望它适合你。