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