Hi Everyone,
I've been battling and trying to research this issue for over 2 days now with absolutely no luck.
I am trying to retrieve a list of clients from the server (server using fluentNHibernate).
The client object is as follow:
[DataContract]
//[KnownType(typeof(System.Collections.Generic.List<ContactPerson>))]
//[KnownType(typeof(System.Collections.Generic.List<Address>))]
//[KnownType(typeof(System.Collections.Generic.List<BatchRequest>))]
//[KnownType(typeof(System.Collections.Generic.List<Discount>))]
[KnownType(typeof(EClientType))]
[KnownType(typeof(EComType))]
public class Client
{
    #region Properties
[DataMember]
public virtual int ClientID { get; set; }
[DataMember]
public virtual EClientType ClientType { get; set; }
[DataMember]
public virtual string RegisterID {get; set;}
[DataMember]
public virtual string HerdCode { get; set; }
[DataMember]
public virtual string CompanyName { get; set; }
[DataMember]
public virtual bool InvoicePerBatch { get; set; }
[DataMember]
public virtual EComType ResultsComType { get; set; }
[DataMember]
public virtual EComType InvoiceComType { get; set; }
//[DataMember]
//public virtual IList<ContactPerson> Contacts { get; set; }
//[DataMember]
//public virtual IList<Address> Addresses { get; set; }
//[DataMember]
//public virtual IList<BatchRequest> Batches { get; set; }
//[DataMember]
//public virtual IList<Discount> Discounts { get; set; }
#endregion
#region Overrides
public override bool Equals(object obj)
{
    var other = obj as Client;
    if (other == null)
        return false;
    return other.GetHashCode() == this.GetHashCode();
}
public override int GetHashCode()
{
    return ClientID.GetHashCode() | ClientType.GetHashCode() | RegisterID.GetHashCode() |
            HerdCode.GetHashCode() | CompanyName.GetHashCode() | InvoicePerBatch.GetHashCode() |
            ResultsComType.GetHashCode() | InvoiceComType.GetHashCode();// | Contacts.GetHashCode() |
            //Addresses.GetHashCode() | Batches.GetHashCode() | Discounts.GetHashCode();
}
#endregion
}
As you can see, I have allready tried to remove the sub-lists, though even with this simplified version of the client I still run into the propblem.
my fluent mapping is:
public class ClientMap : ClassMap<Client>
    {
        public ClientMap()
        {
            Table("Clients");
            Id(p => p.ClientID);
            Map(p => p.ClientType).CustomType<EClientType>(); ;
            Map(p => p.RegisterID);
            Map(p => p.HerdCode);
            Map(p => p.CompanyName);
            Map(p => p.InvoicePerBatch);
            Map(p => p.ResultsComType).CustomType<EComType>();
            Map(p => p.InvoiceComType).CustomType<EComType>();
            //HasMany<ContactPerson>(p => p.Contacts)
            //    .KeyColumns.Add("ContactPersonID")
            //    .Inverse()
            //    .Cascade.All();
            //HasMany<Address>(p => p.Addresses)
            //    .KeyColumns.Add("AddressID")
            //    .Inverse()
            //    .Cascade.All();
            //HasMany<BatchRequest>(p => p.Batches)
            //    .KeyColumns.Add("BatchID")
            //    .Inverse()
            //    .Cascade.All();
            //HasMany<Discount>(p => p.Discounts)
            //    .KeyColumns.Add("DiscountID")
            //    .Inverse()
            //    .Cascade.All();
        } 
The client method, seen below, connects to the server. The server retrieves the list, and everything looks right in the object, still, when it returns, the client doesn't receive anything (it receive a List object, but with nothing in it.
Herewith the calling method:
public List<s.Client> GetClientList()
        {
            try
            {
                s.DataServiceClient svcClient = new s.DataServiceClient();
                svcClient.Open();
                List<s.Client> clients = new List<s.Client>();
                clients = svcClient.GetClientList().ToList<s.Client>();
                svcClient.Close(); //when receiving focus from server, the clients object has a count of 0
                return clients;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            return null;
        }
and the server method:
public IList<Client> GetClientList()
        {
            var clients = new List<Client>();
            try
            {
                using (var session = SessionHelper.OpenSession())
                {
                    clients = session.Linq<Client>().Where(p => p.ClientID > 0).ToList<Client>();
                }
            }
            catch (Exception e)
            {
                EventLog.WriteEntry("eCOWS.Data", e.Message);
            }
            return clients; //returns a list with 1 client in it
        }
the server method interface is:
 [UseNetDataContractSerializer]
        [OperationContract]
        IList<Client> GetClientList();
for final references, here is my client app.config entries:
 <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_IDataService" listenBacklog="10" maxConnections="10"
                         transferMode="Buffered" transactionProtocol="OleTransactions"
                         maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" 
                         receiveTimeout="00:10:00" sendTimeout="00:10:00">
                      <readerQuotas maxDepth="51200000" maxStringContentLength="51200000" 
                                    maxArrayLength="51200000" maxBytesPerRead="51200000" 
                                    maxNameTableCharCount="51200000" />
                  <security mode="Transport"/>
                </binding>
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://localhost:9000/eCOWS/DataService"
                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IDataService"
                contract="eCowsDataService.IDataService" name="NetTcpBinding_IDataService"
                behaviorConfiguration="eCowsEndpointBehavior">
            </endpoint>
           <endpoint address="MEX"
                     binding="mexHttpBinding"
                     contract="IMetadataExchange" />
        </client>
        <behaviors>
          <endpointBehaviors>
            <behavior name="eCowsEndpointBehavior">
              <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
            </behavior>
          </endpointBehaviors>
        </behaviors>
    </system.serviceModel>
and my server app.config:
    <system.serviceModel>
      <bindings>
        <netTcpBinding>
          <binding name="netTcpBinding"
                   maxConnections="10" listenBacklog="10"
                   transferMode="Buffered" transactionProtocol="OleTransactions" 
                   maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
                   sendTimeout="00:10:00" receiveTimeout="00:10:00">
            <readerQuotas maxDepth="51200000" maxStringContentLength="51200000" 
                          maxArrayLength="51200000" maxBytesPerRead="51200000" 
                          maxNameTableCharCount="51200000" />
            <security mode="Transport"/>
          </binding>
        </netTcpBinding>
      </bindings>
      <services>
      <service name="eCows.Data.Services.DataService" behaviorConfiguration="eCowsServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:9001/eCOWS/" />
            <add baseAddress="net.tcp://localhost:9000/eCOWS/" />
          </baseAddresses>
        </host>
        <endpoint address="DataService" 
                  binding="netTcpBinding" 
                  contract="eCows.Data.Services.IDataService"
                  behaviorConfiguration="eCowsEndpointBehaviour">
        </endpoint>
        <endpoint address="MEX"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="eCowsEndpointBehaviour">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </endpointBehaviors>      
      <serviceBehaviors>
        <behavior name="eCowsServiceBehavior">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceThrottling maxConcurrentCalls="10" maxConcurrentSessions="10"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
        <behavior name="MexBehaviour">
          <serviceMetadata />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
I use to run into "socket closed / network or timeout" errors, and the trace showed clearly that on the callback it was looking for a listening endpoint, but couldn't find one.  Anyway, after adding the UseNetSerializer that error went away, yet now I'm just not getting anything.
Oh PS.  if I add all the commented out List items, I still retrieve an entry from the DB, but also still not receive anything on the client.
if I remove the  [UseNetDataContractSerializer] I get the following error(s) in the svclog :
  WARNING: Description  Faulted
  System.ServiceModel.Channels.ServerSessionPreambleConnectionReader+ServerFramingDuplexSessionChannel
  
  WARNING: Description  Faulted
  System.ServiceModel.Channels.ServiceChannel
  
  ERROR:
  Initializing[eCows.Data.Models.Client#3]-failed
  to lazily initialize a collection of
  role:
  eCows.Data.Models.Client.Addresses, no
  session or session was closed
  
  ...
  
  ERROR: Could not find default
  endpoint element that references
  contract 'ILogbookManager' in the
  ServiceModel client configuration
  section. This might be because no
  configuration file was found for your
  application, or because no endpoint
  element matching this contract could
  be found in the client element.
If I add a .Not.LazyLoad to the List mapping items, I'm back at not receiving errors, but also not receiving any client information..
Sigh!
Please, if anyone can help with this I'd be extremely grateful.  I'm probably just missing something small.. but... what is it :) hehe.
Thanks in advance!
Neville