2011-06-21 1 views
1

У меня есть приложение клиентского сервера, использующее привязки net.tcp с помощью службы streamedResponse, вся конфигурация WCF определена в app.config, и все работает нормально, без проблем, мне пришлось удалить конфигурацию из клиентского приложения и определить их в коде, ничего не изменилось на сервере, но клиент, кажется, получает ответ как буферизированный, а не потоковый с этим переходом, вот как я создаю службу в клиентском коде:WCF Streamed Response буферизуется после перемещения Config на код

public static BuildChannelFactory() 
{ 
channelFactorty = new ChannelFactory<IMyService>(GetStreamBinding(), 
        Address); 


      channelFactorty .Endpoint.Address = new EndpointAddress(
       new Uri(Address), EndpointIdentity.CreateDnsIdentity(
       "MyServer")); 


      channelFactorty.Credentials.ClientCertificate.SetCertificate(
       StoreLocation.LocalMachine, StoreName.Root, 
       X509FindType.FindBySubjectName, 
       "MySubject"); 

      channelFactorty.Credentials.ServiceCertificate. 
Authentication.CertificateValidationMode = 
System.ServiceModel.Security.X509CertificateValidationMode.Custom; 

channelFactortyCredentials.ServiceCertificate.Authentication. 
CustomCertificateValidator = MyCertificateValidator;  
} 



private static NetTcpBinding GetStreamBinding() 
    { 

      NetTcpBinding streamBinding = new NetTcpBinding 
      { 
       Name = "streamBinding", 
       ReceiveTimeout = new TimeSpan(2, 0, 0), 
       SendTimeout = new TimeSpan(0, 2, 0), 
       MaxBufferSize = int.MaxValue, 
       MaxReceivedMessageSize = int.MaxValue, 
       TransferMode = TransferMode.StreamedResponse, 

       ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas 
       { 
        MaxArrayLength = int.MaxValue, 
        MaxStringContentLength = int.MaxValue 
       } 

      }; 

      streamBinding .Security.Mode = SecurityMode.Transport; 
      streamBinding .Security.Transport.ClientCredentialType = 
      TcpClientCredentialType.Certificate; 
     } 

     return streamBinding; 
    } 

ответ

0

ОК не проблема в коде, проблема была в ответе, это был пользовательский поток, который содержит свойство List, это не поддерживается, и оно будет автоматически переключено на буферизацию. поэтому перемещен список, который будет возвращен с заголовком сообщения, и все будет работать нормально.