Какой лучший вариант транспорта

У меня есть настольное приложение C #.

В настоящее время он отправляет JPEGS на мой сервер с помощью вызовов WCF на мой сервер IIS с помощью basicHttpBinding.

Еще я использую:

messageEncoding="Mtom"

и я использую атрибут:

[OperationContract(IsOneWay = true)]

на моем интерфейсе к моему методу в моем WCF.

Максимальное количество байтов, которое я загружаю для каждого изображения, никогда не превышает 18 КБ.

Загрузок - столько, сколько я могу вместить в свои звонки. Они загружаются последовательно, чтобы не перегружать роутер.

Я читал описания использования различных транспортных средств, например, Basic, TCP, NamePipes.

будет ли я оптимальным способом разместить привязку TCP Net в службе Windows (т.е. вне IIS) или не будет никаких различий в скорости загрузки?

Я смущен...


person Andrew Simpson    schedule 03.03.2015    source источник


Ответы (3)


Несколько мыслей для размышления:

Привязка Net.Tcp обычно считается наиболее эффективным типом привязки для связи между различными конечными точками. Недостатки в том, что net.tcp не совместим с клиентами, не относящимися к WCF, и плохо работает с балансировкой нагрузки. Если ваш вариант использования позволяет избежать этих двух условий, вы можете увидеть повышение производительности с привязкой Net.Tcp.

В качестве альтернативы вы также можете рассмотреть двоичное кодирование через HTTP, которое имеет преимущества высокопроизводительного сериализатора без ограничений использования Net.Tcp (взаимодействие и усложнение балансировки нагрузки).

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

https://msdn.microsoft.com/en-us/library/vstudio/hh323713%28v=vs.100%29.aspx

Дополнительная информация о производительности доступна в этом сообщении:
WCF Насколько быстрее TCP, а не HTTP

person Seymour    schedule 03.03.2015
comment
Привет, спасибо за ответ. Все мои клиенты являются wcf и не требуют ответа от сервера. Будет много клиентов, загружающих изображения. Если бы я надела маму, то скопировал бы изображение дважды. Однажды в сообщении msmq и приложении для чтения очереди и сохранения на жесткий диск. Ваш комментарий МОЖЕТ увидеть, что повышение производительности недостаточно однозначно. Это основа моего вопроса. Спасибо за ссылки - person Andrew Simpson; 03.03.2015

Если вы используете только настольное приложение, вам следует использовать привязку TCP.

person Rajat_RJT    schedule 04.03.2015
comment
Привет, спасибо за ответ. Я не просто использую рабочий стол, я загружаю его на свой сервер. Мой вопрос касался двух вопросов: 1) быстрее ли работать вне IIS и 2). Быстрее ли TCP. Сказать мне, что я ДОЛЖЕН использовать привязку TCP без каких-либо объяснений, мне не очень помогает. Но спасибо за уделенное время :) - person Andrew Simpson; 04.03.2015
comment
Да, вы можете использовать собственный хостинг, но не получите функций, которые IIS предоставляет службам. а о TCP эта статья поможет вам: tcpVSpipeVSbasic - person Rajat_RJT; 05.03.2015
comment
Привет, спасибо, что уделили этому время. Я объяснил, что должен делать мой тип услуг. На основании предоставленной мной информации, какие преимущества я получу от использования IIS? - person Andrew Simpson; 05.03.2015
comment
Также спасибо за ссылку. Я видел это раньше. Опять же, это мнение, а не фактические ответы. Я все еще ищу ПОЧЕМУ - person Andrew Simpson; 05.03.2015

Самый распространенный способ сделать это - использовать потоковую передачу.

Для передачи больших файлов / любых файлов с помощью «WCF service + HTTP» мы можем использовать следующие типы привязок:

  • wsHttpBinding
  • basicHttpBinding

В wsHttpBinding мы можем установить для атрибута transfermode значение Buffered, но использование этого подхода для больших файлов имеет недостаток, поскольку он должен поместите весь файл в память перед загрузкой / загрузкой. Большой буфер требуется как на веб-клиенте, так и на узле службы WCF. Однако этот подход очень полезен для безопасной передачи небольших файлов.

В basicHTTPBinding мы можем использовать режим передачи как потоковый, чтобы файл можно было передавать в виде фрагментов.

NetTcpBinding более полезен с точки зрения безопасности и, конечно, производительности, но для вашего случая я предлагаю basicHTTPBinding.

person Aarifmohammad Mansuri    schedule 19.03.2015
comment
Привет, спасибо за комментарий. Я все это уже знаю. Мой вопрос заключался в прямом сравнении базового стриминга и потоковой передачи NetTcp. Вы только что добавили мнение в самом конце без реальной причины, почему ... - person Andrew Simpson; 19.03.2015
comment
Кроме того, как я уже сказал в своем вопросе, я НЕ передаю большие файлы. Их 18Кб - person Andrew Simpson; 19.03.2015
comment
Привет, это то, что я говорю. Только для загрузки / загрузки файлов вы можете использовать basicHTTPBinding, и, как вы сказали, ваши файлы не превышают 18 КБ, тогда вы получите приемлемую производительность с тем же самым, но ваша цель включает TCP для доставки сообщений и безопасность Windows для сообщений и аутентификации во время выполнения, Поддерживает дуплексные контракты и транзакции, а клиенты находятся в инфраструктуре интрасети, а затем переходят с NetTcpBinding, потому что он использует протокол TCP и обеспечивает поддержку безопасности, транзакций и надежности. - person Aarifmohammad Mansuri; 19.03.2015
comment
TCP должен быть быстрее. Каковы ваши аргументы и логика, почему это не так? - person Andrew Simpson; 19.03.2015