自托管WCF上的基本Http和net.tcp绑定。无法连接到net.tcp绑定

时间:2014-03-26 19:25:07

标签: .net web-services wcf net.tcp self-hosting

我需要在自托管WCF服务上提供两个端点。这是因为我通过两个不同的连接连接到它,一个用于LAN连接,一个用于传入的Internet连接。

我的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()

出于测试目的,我将ONLINE端点(Internet)设置为我的本地IP,以消除任何防火墙问题。

在visual studio中使用添加服务引用向导/工具时,我无法在net.tcp://10.0.0.101:5416 / pluto

上连接到TCP绑定

尝试使用该工具查找绑定时出现以下错误。

  

无法识别URI前缀   元数据包含无法解析的引用:' net.tcp://10.0.0.101:5416 / pluto'。
  套接字连接已中止。这可能是由于处理消息的错误或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为' 00:04:59.9989993'   远程主机强制关闭现有连接   如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

注意:

通过上面的自托管实现,我可以连接并使用basicHttpBinding端点。

1 个答案:

答案 0 :(得分:2)

您需要添加“添加服务引用向导”可用于获取WSDL的mexTcpEndpoint。在之后添加serviceMetadataBehavior。

serviceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                           MetadataExchangeBindings.CreateMexTcpBinding(),
                                           "net.tcp://localhost:6666/Service/mex");