我有一個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 –