74 lines
2.6 KiB
VB.net
74 lines
2.6 KiB
VB.net
Imports System.ServiceModel
|
|
Imports System.ServiceModel.Channels
|
|
Imports System.ServiceModel.Description
|
|
|
|
Namespace WCF
|
|
|
|
Public Class ServiceHost(Of T)
|
|
Inherits ServiceHost
|
|
|
|
Public Sub New(baseAddresses As Uri())
|
|
MyBase.New(GetType(T), baseAddresses)
|
|
End Sub
|
|
|
|
Public Sub New(singletonInstance As Object, baseAddresses As Uri())
|
|
MyBase.New(singletonInstance, baseAddresses)
|
|
|
|
End Sub
|
|
|
|
Public Sub EnableMetadataExchange(Optional EnableHttpGet As Boolean = True)
|
|
If State = CommunicationState.Opened Then
|
|
Throw New InvalidOperationException("Host is already opened")
|
|
End If
|
|
|
|
Dim oMetadataBehavior As ServiceMetadataBehavior = Description.Behaviors.Find(Of ServiceMetadataBehavior)()
|
|
|
|
If oMetadataBehavior Is Nothing Then
|
|
oMetadataBehavior = New ServiceMetadataBehavior()
|
|
Description.Behaviors.Add(oMetadataBehavior)
|
|
|
|
If BaseAddresses.Any(Function(uri) uri.Scheme = "http") Then
|
|
oMetadataBehavior.HttpGetEnabled = EnableHttpGet
|
|
Else
|
|
oMetadataBehavior.HttpGetEnabled = False
|
|
End If
|
|
End If
|
|
|
|
AddAllMexEndPoints()
|
|
End Sub
|
|
|
|
Public ReadOnly Property HasMexEndpoint As Boolean
|
|
Get
|
|
Return Description.Endpoints.Any(Function(endpoint) endpoint.Contract.ContractType = GetType(IMetadataExchange))
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub AddAllMexEndPoints()
|
|
Debug.Assert(HasMexEndpoint = False)
|
|
|
|
For Each baseAddress As Uri In BaseAddresses
|
|
Dim oBinding As Binding = Nothing
|
|
|
|
Select Case baseAddress.Scheme
|
|
Case "net.tcp"
|
|
oBinding = MetadataExchangeBindings.CreateMexTcpBinding()
|
|
Exit Select
|
|
Case "net.pipe"
|
|
oBinding = MetadataExchangeBindings.CreateMexNamedPipeBinding()
|
|
Exit Select
|
|
Case "http"
|
|
oBinding = MetadataExchangeBindings.CreateMexHttpBinding()
|
|
Exit Select
|
|
Case "https"
|
|
oBinding = MetadataExchangeBindings.CreateMexHttpsBinding()
|
|
Exit Select
|
|
End Select
|
|
|
|
If oBinding IsNot Nothing Then
|
|
AddServiceEndpoint(GetType(IMetadataExchange), oBinding, "mex")
|
|
End If
|
|
Next
|
|
End Sub
|
|
End Class
|
|
|
|
End Namespace |