Потоковое с WCF и MTOM

Я использую привязки WCF с потоковым режимом передачи как для загрузки, так и для загрузки двоичного содержимого в / из службы. Я'нам удалось заставить его работать. Я'Я буду включать конфигурацию, контракты и т. д. для справки.

Мы провели несколько тестов для сравнения различных привязок и кодировок. Загрузка результатов выглядит нормально. NetTcp - самый быстрый, затем BasicHttp-MTOM и затем BasicHttp-Text. Что меня удивляет, так это то, что при загрузке больших файлов MTOM работает очень медленно, в отличие от кодирования текста с помощью BasicHttp и двоичного кодирования с помощью NetTcp.

Я что-то пропустил? Почему BasicHttp-MTOM работает намного медленнее, чем другие привязки при загрузке? Кроме того ямы реализовали двойную буферизацию для загрузок. Это также хорошо работает со всеми привязками, кроме BasicHttp с кодировкой MTOM. Почему двойная буферизация непомочь при использовании MTOM?

Спасибо за чтение, ваши советы и идеи по этому поводу.

Результаты теста:

Загрузка 150 МБ двоичных данных в сервис. Клиент создает файловый поток из файла размером 150 МБ и передает его на сервер. Сервер читает поток в поток памяти. Двойного буфера пока нет. Результаты кажутся быстрыми, поскольку нет записи данных в файловую систему. И привязки работают как ожидалось.

Загрузка 100 МБ двоичных данных из сервиса. Сервис создает поток памяти и передает клиенту. Клиент пишет в файловую систему. Вот результаты с одинарным и двойным буфером. Как вы можете видеть, MTOM кажется очень медленным и нене отвечает на двойную буферизацию.

Конфигурация сервера (опущены некоторые части для простоты):


  
    
  
  
    
      
        
        
      
      
        
        
        
        
      
    
  

Конфигурация клиента (опущены некоторые части для простоты):


  
    
      
        
        
        
        
      
      
        
        
      
    
  

Контракт на обслуживание:

[ServiceContract]
public interface IFileService
{
    [OperationContract]
    void UploadFile(DocumentData document);

    [OperationContract]
    DocumentData DownloadFile();
}

Сообщение Контракт:

[MessageContract]
public class DocumentData
{
    [MessageHeader(MustUnderstand = true)]
    public string DocumentName { get; set; }

    [MessageHeader(MustUnderstand = true)]
    public int FileLength { get; set; }

    [MessageBodyMember(Order = 1)]
    public Stream Data { get; set; }
}

Изменить: Это оказалось проблемой с моей настройкой среды разработки на работе. Когда я проводил те же тесты дома, результаты были такими, как ожидалось.

Ответы на вопрос(1)

Ваш ответ на вопрос