Привязка Basichttp И net.tcp к самодостаточной WCF. Не удается подключиться к привязке net.tcp

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

Моя конечная точка BasicHttp всегда работала, и теперь я пытаюсь добавить конечную точку TCP, поскольку .Net сообщает мне, что у меня не может быть более одной конечной точки / привязки http ...

Моя служба запускается без ошибок, с настроенными обеими конечными точками.

Dim serviceAddyArray(1) As Uri

Dim myServiceAddressLOCAL As New Uri("http://" & localIpAddress & ":" & tcp_port & "/" & servicename)

serviceAddyArray(0) = myServiceAddressLOCAL

Dim myServiceAddressONLINE As New Uri("net.tcp://" & "10.0.0.101" & ":" & 5416 & "/" & servicename)

serviceAddyArray(1) = myServiceAddressONLINE

'myservicehost = New ServiceHost(GetType(plutocomm), myServiceAddress)

myservicehost = New ServiceHost(GetType(plutocomm), serviceAddyArray)


Dim BasicBinding As New BasicHttpBinding
BasicBinding.MaxReceivedMessageSize = 2147483647

Dim TCPBinding As New NetTcpBinding
TCPBinding.MaxReceivedMessageSize = 2147483647

'add local endpoint
myservicehost.AddServiceEndpoint(GetType(Iplutocomm), BasicBinding, myServiceAddressLOCAL)

'add online endpoint
myservicehost.AddServiceEndpoint(GetType(Iplutocomm), TCPBinding, myServiceAddressONLINE)


 ' Enable metadata publishing.
 Dim smb As New ServiceMetadataBehavior()
 smb.HttpGetEnabled = True
 smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15
 myservicehost.Description.Behaviors.Add(smb)

 myservicehost.Open()

В целях тестирования я установил конечную точку ОНЛАЙН (Интернет) на свой локальный IP-адрес, чтобы устранить любые проблемы с брандмауэром.

При использовании мастера / инструмента добавления ссылки на службу из Visual Studio я не могу подключиться к привязке TCP на net.tcp: //10.0.0.101: 5416 / pluto

Я получаю следующую ошибку при попытке найти привязку с помощью инструмента.

Префикс URI не распознается.
Метаданные содержат ссылку, которую невозможно разрешить: 'net.tcp: //10.0.0.101: 5416 / pluto'.
Соединение с сокетом было прервано. Это может быть вызвано ошибкой при обработке вашего сообщения или превышением тайм-аута приема удаленным узлом, или проблемой базового сетевого ресурса. Тайм-аут локального сокета был «00: 04: 59.9989993».
Существующее соединение было принудительно закрыто удаленным хостом.
Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу.

Примечание:

С указанной выше реализацией на собственном хостинге я МОГУ подключиться к конечной точке basicHttpBinding и использовать ее.


person Louis van Tonder    schedule 26.03.2014    source источник


Ответы (1)


Вам необходимо добавить mexTcpEndpoint, который «мастер добавления ссылки на службу» может использовать для получения WSDL. Сделайте это после добавления serviceMetadataBehavior.

serviceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                           MetadataExchangeBindings.CreateMexTcpBinding(),
                                           "net.tcp://localhost:6666/Service/mex");
person Jon Lindeheim    schedule 26.03.2014
comment
Я действительно пробовал это ... НО, это было не после поведения метаданных службы ... Я попробую. На данный момент я заставил его работать, используя конечную точку http для добавления ссылок, а затем удалив ссылку http из web.config и оставив только ссылку TCP ... - person Louis van Tonder; 27.03.2014
comment
Если вы поставите i перед добавлением smb, вы получите: Имя контракта «IMetadataExchange» не может быть найдено в списке контрактов, реализованных службой, когда вы запускаете хостинг службы. - person Jon Lindeheim; 27.03.2014