Ответ 1
net.tcp
- это просто схема URI, используемая в Windows, для определения конечных точек, к которым можно получить доступ с использованием TCP.
Аналогично, net.msmq
и net.pipe
, являются схемами URI для адресации конечных точек, которые используют протокол MSMQ и Протокол Named Pipes, соответственно.
Префикс net
для всех трех указывает, что схема URI была разработана исключительно для использования на платформе Microsoft.NET и обычно не принимается в более широком Интернете. (Другие схемы URI, такие как http
и ftp
, имеют общепринятые значения и поэтому используются в WCF без какого-либо префикса). Префикс net
поэтому служит предупреждающим звонком, что связанная конечная точка будет иметь ограниченную/несовместимую с другими приложениями, которые не выполняются на платформе .NET.
Пример URI:
net.tcp://localhost:7272
net.msmq://somemachine/publicQueue
net.pipe://machine.domain.com/somePipe
SIDEBAR: в то время как MSMQ и именованные каналы явно являются протоколами Microsoft, и поэтому отсутствие интероперабельности неудивительно, TCP является основным протоколом Интернета, и поэтому, безусловно, он используется в WCF не должен быть специфичным для .NET?
Ну, совместимость в WCF уже обрабатывается SOAP и HTTP, которые работают поверх TCP. Если вы хотите взаимодействовать через TCP - используйте один из этих протоколов.
Таким образом, Microsoft стремилась предоставить альтернативу коммуникации, когда ключевой задачей была производительность, а не интероперабельность. TCP был логическим выбором, но TCP является протоколом относительно низкого уровня, который требует дополнительного поведения и значений по умолчанию, которые должны быть реализованы, чтобы работать прямолинейно для платформы обмена сообщениями, такой как WCF. Кроме того, нет общепринятой схемы URI для доступных для TCP ресурсов, поэтому Microsoft необходимо ее изобрести. Таким образом, родился net.tcp
.
В то время как сами URI не обязательно указывают, какая именно привязка используется, они дают подсказку. Согласно ответам Саймона Мурье, привязки, доступные в настоящее время в WCF, можно найти здесь. Так, например, адрес net.tcp
может указывать на то, что требуется NetTcpBinding, NetPeerTcpBinding или NetTcpContextBinding.