2014-03-26 2 views
1

자체 호스팅 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 엔드 포인트를 사용할 수 있습니다.

답변

2

"서비스 참조 추가 마법사"가 WSDL을 가져 오는 데 사용할 수있는 mexTcpEndpoint를 추가해야합니다. 뒤에 을 입력하고 serviceMetadataBehavior를 추가합니다.

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

실제로 이것을 시도했지만 ... 서비스 메타 데이터 동작 "후"가 아니 었습니다. 지금은 http 엔드 포인트를 사용하여 참조를 추가 한 다음 web.config에서 http refeerence를 제거하고 TCP 참조 만 남겨 둡니다 ... –

+0

smb를 추가하기 전에 i를 입력하면 다음과 같이 나타납니다. _The 계약 이름 'IMetadataExchange'은 서비스 호스팅 계약을 시작할 때 service_가 구현 한 계약 목록에서 찾을 수 없습니다. –

관련 문제