Являются ли WCF «односторонними» связями на самом деле UDP? - PullRequest
1 голос
/ 10 января 2012

В этой статье (ближе к концу в разделе «Windows Communication Foundation») автор предполагает, что односторонняя передача в WCF - это, по сути, UDP.Это правильно?Должен ли я предположить, исходя из содержания этой статьи, что пометка моих служебных операций как «односторонних» означает, что я использую UDP?

Кроме того, он предлагает использовать UDP в сочетании с WS-ReliableMessaging, чтобы отрицать необходимостьсами напишите эти аспекты транспортного протокола ... Хорошо, но если я хочу использовать преимущества производительности UDP в ситуации, которая этого требует, я должен, согласно предложению этой статьи, просто использовать 'one way' и WS-ReliableMessagingи мне хорошо идти !?Звучит немного странно ...

Так в чем же дело?Какие предостережения о том, что эта статья предлагает?

Ответы [ 4 ]

2 голосов
/ 10 января 2012

Нет, вы неправильно поняли статью. В статье говорится о двух разных вещах:

  1. Односторонние операции WCF несколько аналогичны дейтаграмм UDP.

  2. WS-ReliableMessaging может быть реализован поверх UDP при желании.

Даже односторонние операции требуют подтверждения, повторной передачи и т. П., Чтобы сделать их надежными.

1 голос
/ 10 января 2012

WS-ReliableMessaging полагается на то, что получатель отправляет подтверждения («подтверждения») отправителю.В противном случае отправитель не сможет узнать, нужно ли повторно отправить сообщение.В TCP это встроено в транспортный протокол (это одно из различий между TCP и UDP).

В UDP вы отказываетесь от «издержек» TCP, но если вам нужен надежный обмен сообщениями, ваш сервер все еще отправляет что-то обратно клиенту.

1 голос
/ 10 января 2012

На самом деле, если вы прочтете этот раздел статьи чуть более внимательно, вы увидите, что в нем есть нечто большее, чем просто использование одностороннего обмена сообщениями и WS-ReliableMessaging. Вы также должны добавить элемент привязки UDP (.e.g, bindingElements.Add(new UdpTransportBindingElement());) и другие подобные вещи. Если вы не добавите эти вещи, вы все равно будете использовать TCP.

В качестве дополнительного замечания, я подозреваю, что вам нужно побаловать себя довольно сложными тестами, прежде чем вы решите, что UDP на самом деле будет иметь более высокую производительность, чем TCP для веб-сервисов. Я сам не проводил эти тесты, но я подозреваю, что к тому времени, когда ваша привязка soap.udp:// будет завершена добавлением всех битов надежного обмена сообщениями и чего-то другого к вашему сервису, у вас будут практически все те же накладные расходы как ПТС. Я подозреваю, что причина, по которой UDP доступен в качестве транспортной привязки, заключается не в каких-либо превосходных характеристиках производительности, а в том, чтобы предоставить альтернативу для углового случая сценариев, когда TCP (по любой причудливой причине среды) недоступен.

1 голос
/ 10 января 2012

Из статьи, которую вы упомянули:

WCF предоставляет несколько сетевых протоколов (прежде всего TCP) и расширяется для других сетевых протоколов путем записи транспортного канала WCF.WCF поддерживает UDP посредством своей модели расширяемости, и код для базового канала UDP будет предоставлен в качестве примера кода в WinFX® SDK.

Они используют транспорт UDP в своих настройках, поэтому вих ситуация, да.Если у вас есть служба, использующая транспорт на основе TCP, то односторонняя связь не будет UDP.

И далее в статье:

Реализация UDP на основе WCF:односторонний канал

Таким образом, они на самом деле говорят только о том, как реализован UDP в WCF, а не WCF в целом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...