我有一个WCF服务,该服务在WSHttp端点上运行得非常好,作为ServiceHost下的Windows服务运行。但是由于可伸缩性,我想移动到TCP端点。对于我的生活,我无法弄清楚如何正确承载它。这里是我的主机的OnStart程序,在VB:WCF,Net.Tcp端点,代码优先
Protected Overrides Sub OnStart(ByVal args() As String)
If _svcHost IsNot Nothing Then
_svcHost.Close()
End If
_svcHost = New ServiceHost(GetType(AutoTestsDataService), New Uri("net.tcp://" & GetIPv4Address() & ":8000"))
Dim metaDataBehavior = _svcHost.Description.Behaviors.Find(Of ServiceMetadataBehavior)()
If metaDataBehavior Is Nothing Then
_svcHost.Description.Behaviors.Add(New ServiceMetadataBehavior() With {.HttpGetEnabled = False})
Else
metaDataBehavior.HttpGetEnabled = False
End If
_svcHost.AddServiceEndpoint(GetType(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding, "mex")
_svcHost.AddServiceEndpoint(GetType(AutoTestsDataService), New NetTcpBinding(SecurityMode.None, False), ServiceName)
Dim debugBehavior As ServiceDebugBehavior = _svcHost.Description.Behaviors.Find(Of ServiceDebugBehavior)()
If debugBehavior Is Nothing Then
_svcHost.Description.Behaviors.Add(New ServiceDebugBehavior() With {.IncludeExceptionDetailInFaults = My.Settings.flagDebug})
Else
debugBehavior.IncludeExceptionDetailInFaults = My.Settings.flagDebug
End If
Try
_svcHost.Open()
Catch ex As Exception
_svcHost.Abort()
End Try
End Sub
原样,代码编译好,安装精细和Windows服务启动了罚款。但是在端口8000上没有任何监听。我确定Net.Tcp监听器和端口共享服务正常运行。我之所以选择不使用配置文件,是因为我过去遇到过很多问题,而将代码放在配置文件中是不好的,而不是微软希望我相信的东西。代码优先的实现总是比XML更容易理解,对于我来说,上面的代码将所有正确的部分放在正确的位置。它只是拒绝工作。就像我说的我可以坚持使用WSHttp,但我更愿意理解为什么Net.Tcp不工作。
'_svcHost.Open()'抛出?如果是这样,什么是例外? – ErnieL
否定的,所有的行为都应该如此,在端口8000上只是没有监听。根本没有异常。 –
您是否试过http://stackoverflow.com/questions/1479081/wcf-there-was-no-endpoint-listening-at-net-tcp-querier-svc-that-could-a?rq=1 –