2017-04-10 13 views
2
--- 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などの変数を返すことは問題になりません。C#WCFリストタイプをオブジェクトとして返すときに例外が発生する

リストタイプを返すと例外がスローされます。

例外が発生しました:サーバーが意味のある返信を提供しませんでした。これは、契約の不一致、早すぎるセッションのシャットダウン、または内部サーバーのエラーによって引き起こされる可能性があります。

解決策はありますか?それは文字通り何もすることができ -

答えて

1

あなたのメソッドのテストではなく、オブジェクトのリストの型を返す必要があり、

public List<bool> test() 
    { 
     List<bool> data = new List<bool>(); 
     data.Add(false); 
     data.Add(true); 
     data.Add(false); 
     return data; 
    } 
+0

私は、オブジェクト・タイプとしてリストを返すことはできますか? – Hoony

+0

あなたはリストに追加しているので – Sajeetharan

1

問題は、サーバーがobjectをシリアル化する方法を知らないということです。

他の回答が言ったように、あなたはそれが(JSON/XMLになって)シリアライズすることができるようにList<bool>としてそれを返す必要があるとクライアント

0

に送信されたオブジェクトを返すようにしたい場合は、使用することを検討してください

public Stream test() 
{ 
    List<bool> data = new List<bool>(); 
    data.Add(false); 
    data.Add(true); 
    data.Add(false); 
    return MemoryStream(Encoding.UTF8.GetBytes(data)); 
} 

または単にWCFは、それがDできるように、あなたが渡しているどのような種類を知る必要がありList<bool>

関連する問題