Потоковый ответ WCF буферизуется после перемещения конфигурации в код

у меня есть клиент-серверное приложение, использующее привязки net.tcp со службой streamedResponse, вся конфигурация WCF была определена в app.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;
    }

person YazX    schedule 21.06.2011    source источник


Ответы (1)


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

person YazX    schedule 07.04.2015