자체 호스팅 WCF 서비스에 두 개의 끝점을 제공해야합니다. 이것은 두 개의 서로 다른 연결 (하나는 LAN 연결, 하나는 들어오는 인터넷 연결)을 통해 연결하기 때문입니다. ,자체 호스트 된 WCF의 Basichttp AND net.tcp 바인딩. net.tcp 바인딩에 연결할 수 없습니다.
내 서비스가 오류없이 시작 ...
내 BasicHttp 엔드 포인트는 항상 일을하고 지금은 닷넷 내가 하나 이상의 HTTP 엔드 포인트/바인딩 할 수 없습니다 알려줍니다으로 TCP 엔드 포인트를 추가하는 것을 시도하고있다 두 엔드 포인트가 모두 구성됩니다.
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로 설정했습니다.
비주얼 스튜디오 내에서 추가 서비스 참조 마법사/도구를 사용하여, 나는 net.tcp에 바인딩 TCP에 연결할 수 없습니다 : //10.0.0.101 : 5416/명왕성다음 내가 얻을 도구로 바인딩을 찾으려고 할 때 오류가 발생했습니다.
URI 접두사가 인식되지 않습니다.
메타 데이터에는 확인할 수없는 참조가 포함되어 있습니다 : 'net.tcp : //10.0.0.101 : 5416/pluto'.
소켓 연결이 중단되었습니다. 메시지를 처리하는 중 오류가 발생하거나 원격 호스트에서받는 시간 초과 또는 기본 네트워크 리소스 문제가 원인 일 수 있습니다. 로컬 소켓 타임 아웃은 '00 : 04 : 59.9989993 '입니다.
기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.
서비스가 현재 솔루션에 정의되어있는 경우 솔루션을 빌드하고 서비스 참조를 다시 추가하십시오.
참고 :
그와 함께 자체 호스팅 구현 위에, 나는에 연결하고은 BasicHttpBinding 엔드 포인트를 사용할 수 있습니다.
실제로 이것을 시도했지만 ... 서비스 메타 데이터 동작 "후"가 아니 었습니다. 지금은 http 엔드 포인트를 사용하여 참조를 추가 한 다음 web.config에서 http refeerence를 제거하고 TCP 참조 만 남겨 둡니다 ... –
smb를 추가하기 전에 i를 입력하면 다음과 같이 나타납니다. _The 계약 이름 'IMetadataExchange'은 서비스 호스팅 계약을 시작할 때 service_가 구현 한 계약 목록에서 찾을 수 없습니다. –