Доброго времени суток...
Помогите пожалуйста с такой проблемой:
Мне нужно, чтоб мой клиент соединялся с сервисом по протоколу TCP и забирал от туда список с данными.
Поиск в сети ничего не дал

Загвостка в том, что как тока я хочу получить с сервиса большой список данных появляется ошибка:
"Контракту требуется свойство Session, однако привязка "NetTcpBinding" его не поддерживает или этого не позволяет неправильная настройка."
Нигде не нащел ответа на эту ошибку, просто не понимаю, в чем проблема
Может я что-то упустил существенное?
Помогите разобраться с этим...
Заранее благодарю.
Contract:
/*часть класса с данными (на всякий случай)*/
[DataContract]
public class BigLog
{
int id;
string name;
public Log(int _id, string _name)
{
id = _id;
name = _name;
}
[DataMember]
public Int32 ID
{
get { return id; }
set { id = value; }
}
[DataMember]
public String Name
{
get { return name; }
}
........
}
[ServiceContract(SessionMode = SessionMode.Required)]
public interface IContract1
{
[OperationContract(IsInitiating = true, IsOneWay = true, IsTerminating = false)]
void Join();
[OperationContract(IsInitiating = false, IsOneWay = true, IsTerminating = true)]
void Leave();
[OperationContract(IsInitiating = false, IsOneWay = false, IsTerminating = false)]
List<BigLog> GetDataList();
}
Service:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service1 : IContract1
{
public Service1() { }
public void Join()
{
Console.WriteLine("Join new client...");
}
public void Leave()
{
Console.WriteLine("Client leave...");
}
public List<BigLog> GetDataList()
{
int count = 100;
List<BigLog> lst = new List<BigLog>(count);
for (int i = 0; i < count; i++)
lst.Add(new BigLog(true, i));
return lst;
}
}
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(Service1));
#region Net Tcp Binding
NetTcpBinding binding = new NetTcpBinding();
binding.TransferMode = TransferMode.Streamed;
binding.MaxReceivedMessageSize = int.MaxValue;
binding.CloseTimeout = TimeSpan.MaxValue;
binding.SendTimeout = TimeSpan.MaxValue;
host.AddServiceEndpoint(typeof(IContract1), binding, new Uri("net.tcp://localhost:5000/Services"));
#endregion
#region Matadata Exchange Binding
host.Description.Behaviors.Add(new ServiceMetadataBehavior());
Binding mexBinding = MetadataExchangeBindings.CreateMexTcpBinding();
host.AddServiceEndpoint(typeof(IMetadataExchange), mexBinding, new Uri("net.tcp://localhost:5000/Services/mex"));
#endregion
host.Open();
Console.WriteLine("Service open...");
Console.ReadKey();
host.Close();
Console.WriteLine("Service close...");
Console.ReadKey();
}
Client:
static void Main(string[] args)
{
NetTcpBinding binding = new NetTcpBinding();
binding.TransferMode = TransferMode.Streamed;
binding.SendTimeout = TimeSpan.MaxValue;
EndpointAddress address = new EndpointAddress("net.tcp://localhost:5000/Services");
ChannelFactory<IContract1> channel = new ChannelFactory<IContract1>(binding, address);
IContract1 uploader = channel.CreateChannel();
List<BigLog> lst = uploader.GetDataList();
Console.ReadKey();
((IClientChannel)uploader).Close();
}