--- SERVER
[ServiceContract(Namespace = "TEST")]
public interface IServer
{
[OperationContract]
object test();
}
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant, InstanceContextMode = InstanceContextMode.PerSession)]
class ServerWCallbackImpl : IServer
{
public object test()
{
List<bool> data = new List<bool>();
data.Add(false);
data.Add(true);
data.Add(false);
return data;
}
}
---- CLIENT
DuplexChannelFactory<IServer> cf =
new DuplexChannelFactory<IServer>( new CallbackImpl(), new NetTcpBinding(SecurityMode.None), new EndpointAddress("net.tcp://localhost:8080/TEST"));
IContractServerAgent srv = cf.CreateChannel();
List<bool> data = srv.test() as List<bool>;
-----------------------
返回诸如int或bool之类的变量不是问题。
返回列表类型会抛出异常。
发生异常:服务器未提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的。
有解决方案吗?
答案 0 :(得分:1)
您的方法测试应该返回List的类型而不是object,
public List<bool> test()
{
List<bool> data = new List<bool>();
data.Add(false);
data.Add(true);
data.Add(false);
return data;
}
答案 1 :(得分:1)
问题是服务器不知道如何序列化object
- 它可能完全是任何东西。
正如其他答案所说,您需要将其作为List<bool>
返回,以便可以将其序列化(转换为json / xml)并发送给客户端
答案 2 :(得分:1)
WCF需要知道您传递的是哪种类型,以便它可以反序列化该对象,换言之, WCF是强类型框架。
答案 3 :(得分:0)
如果要返回对象,请考虑使用Stream
,如下所示:
public Stream test()
{
List<bool> data = new List<bool>();
data.Add(false);
data.Add(true);
data.Add(false);
return MemoryStream(Encoding.UTF8.GetBytes(data));
}
或只是返回List<bool>