net.tcp
- это просто схема URI, используемая в Windows для определения конечных точек, к которым можно получить доступ с помощью TCP.
Аналогично, net.msmq
и net.pipe
являются схемами URI для адресации конечных точек, которые используют протокол MSMQ и Протокол именованных каналов соответственно.
Префикс 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 и Named Pipes явно являются протоколами Microsoft, и, следовательно, отсутствие взаимодействия не вызывает удивления, TCP является основным протоколом Интернета, и поэтому, безусловно, его использование в WCF не должноКонкретно .NET?
Что ж, совместимость в WCF уже обрабатывается SOAP и HTTP, которые работают поверх TCP.Если вы хотите взаимодействия по TCP - используйте один из этих протоколов.
Поэтому Microsoft искала альтернативную коммуникацию, где ключевой целью была производительность, а не взаимодействие.TCP был логичным выбором, но TCP - это протокол сравнительно низкого уровня, который требует дополнительного поведения и значений по умолчанию, которые должны быть реализованы для прямой работы с инфраструктурой обмена сообщениями, такой как WCF.Кроме того, для общедоступных ресурсов TCP не существует общепринятой схемы URI, и поэтому Microsoft необходимо было ее изобрести.Таким образом, net.tcp
родился.
Хотя сами URI не обязательно указывают, какую именно привязку использовать, они дают подсказку.Согласно ответу Саймона Мурье, привязки, доступные в настоящее время в WCF, можно найти здесь .Так, например, адрес net.tcp
может указывать, что требуется NetTcpBinding, NetPeerTcpBinding или NetTcpContextBinding.