2011-07-28 26 views
7

LAN에서 정상적으로 작동하는 WCF 서비스가 있지만 서비스 참조 외부에서 액세스하려고 할 때 실패합니다.WCF가 IP 주소 대신 컴퓨터 이름을 사용하고 있습니다. 해결할 수 없습니다.

내 WCF 서비스는 도메인이없는 고정 IP를 사용하는 win2k3 상자에서 호스팅됩니다.

+1

그것을 로컬로 작동하고 WSDL 포트 80 웹 페이지에 표시되는 경우, 서비스가 다른 포트를 사용할 가능성이 있으며 라우터 방화벽이 해당 포트에 대한 외부 액세스를 차단하고 있습니까? – Tod

+0

방화벽에 문제가 없지만 LAN을 통해 컴퓨터 이름을 확인할 수 없지만 지금 해결책이 있습니다. 어쨌든 Thnx. – baileyswalk

답변

2

일부 파기 후 이에 대한 답변을 찾았습니다. 여기 누군가가 다른 사람을 구할 수있어 귀찮아한다는 것을 알았습니다. 이건 내 서비스 참조 작업을 할 수있을 정도로 충분한로 사용

<endpoint 
    address="http://xx.xx.xx.xx/ServiceApp/Service.svc" 
    binding="basicHttpBinding" contract="IService"> 
</endpoint> 
<host> 
    <baseAddresses> 
    <add baseAddress="http://xx.xx.xx.xx/ServiceApp/" /> 
    </baseAddresses> 
</host> 

하지만 디스코 파일이 시작 :

1. ) 기본 IP의과 같이 주소와 호스트 이름을 추가 엔드 포인트 주소 &에 IP 추가 ip 대신 컴퓨터 이름으로 반환됩니다 (.NET 4.0으로 업데이트 한 후 였다고 생각합니다).

2.) 도메인 이름 (www.myDomain.com)이 있으면 IIS의 호스트 헤더에 추가하십시오.

3) 그러나 자신의 호스트 파일)

4) 최고의 솔루션이를 추가 할 모든 클라이언트를 얻기 위해 항상 (클라이언트 호스트 파일에 가능한 한 쉽게 수정을 IP 주소 & 컴퓨터 이름을 추가 여기 "Timetheos"사후에 따라, ServiceHosts 팩토리 속성 구현하는 것이었다 발견 : 나는 로컬 & 디버그 내 서비스 라이브러리를 개발하고 테스트 한 다음에 서비스를 배포 서비스 응용 프로그램을 사용할 수 있습니다로 http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c7fd51a2-773e-41d4-95a0-244e925597fe

이 나를 위해 잘 작동을 내 dev 서버에 저장하고 게시 한 후에 구성 파일을 변경할 필요가 없었습니다.

이 전체 과정은 완전히 악몽이었습니다. 나는 누군가에게 위와 같은 상황에 있고 더 이상 위의 사항에 대한 정보가 필요하다면 연락을 원하지 않을 것입니다!

+0

안녕 baileyswalk, IP 주소로 변경하면 사용자 이름과 암호를 묻습니다. 연결하지 않으면 –

14

이것은 나를 위해 일한 것입니다. 구성 파일에서

< serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel > 

false로 설정하면 컴퓨터 이름이 이상하게 변경되었습니다.

multipleSiteBindingsEnabled="true" 내가해야하는대로이 작업을 수행해야하는 것으로 보입니다.

+0

이 문제는 Windows Server 2012에서 저에게 유용합니다. – skjoshi

+0

고맙습니다. 문제 –

+0

그러면 서비스 종점에 상대 서비스 주소가 있어야합니다. –

0

이렇게 서비스 끝점과 httpgeturl을 설정하십시오.

<services> 
    <service behaviorConfiguration="serviceBehaviour" name="Demo.Service.MultiEndPointsService"> 
     <endpoint address="http://192.168.1.2/Demo.Service/MultiEndPointsService.svc/basic" binding="basicHttpBinding" bindingConfiguration="basicBinding"  contract="Demo.Service.MultiEndPointsService" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="serviceBehaviour"> 
      <serviceMetadata httpGetEnabled="true" httpGetUrl="http://192.168.1.2/Demo.Service/MultiEndPointsService.svc/basic"/>  
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
4

HTTP 요청에서 Host 헤더를 다시 사용하는 방법을 찾고있었습니다. 제 생각에는 이것은 생산 단계에서 개발 단계에서 작동해야합니다.

<behaviors> 
    <serviceBehaviors> 
     <behavior name="..."> 
     ... 
     <useRequestHeadersForMetadataAddress /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 

WSDL에 엔드 포인트는 클라이언트가 액세스 할 수있는 경우이 방법이 모든 관련된 WSDL/XSD 자원은 동일한 기본 URL에 액세스 할 수 보장 : 그것은 밝혀

는만큼 간단합니다.

+0

고맙습니다. 저에게 도움이되었습니다. –

1

은 당신과 같이 기본 URL에 LocalHost를 또는 컴퓨터 이름의 자리에 별표 * (와일드 카드)를 사용할 수 있습니다 :

<add baseAddress="net.tcp://*:4502/WxWcfService_01" />