2013-06-04 3 views
4

IIS가 구성된 컴퓨터에서 WCF 자체 호스팅 서비스가 실행되고 있습니다. 자가 호스팅 서비스는 아무런 문제없이 시작되며 일단 실제로 작동되면? wsdl 경로에 액세스 할 수 있습니다.왜 컴퓨터 외부에서 내 WCF 서비스에 연결할 수 없지만 로컬로 할 수 있습니까?

컴퓨터에서 다음 주소를 누르려고하면 svcutil.exe에 대한 웹 페이지를로드하고 서비스에 액세스하는 방법을로드합니다.

http://myspecialservice:9000/ 
http://192.168.1.230:9000/ 

그러나 다른 컴퓨터에서 같은 주소를 누르려고하면. 나는 아무것도 얻지 못한다. 오류없이 페이지를로드 할 수 없습니다. 그리고 나는 호스트 이름을 사용할 때 올바른 IP 주소로 확인하고 있는지 테스트했습니다.

또한 고급 보안 기능을 가진 Windows 방화벽에서 서비스의 .exe를 허용하도록 구성했습니다. 모든 이더넷 프로필 및 모든 포트의 경우. 어떤 충고라도 도움이 될 것입니다. 다시 말하지만, 서비스가 기계에서 로컬로 액세스 할 수 있고 올바르게 작동한다는 것을 알고 있습니다. 그것은 어딘가에 기계 구성이없는 것 같습니다.

<?xml version="1.0"?> 
<configuration> 
    <system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     <add name="TextWriter" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log"/> 
     <add name="Console" type="System.Diagnostics.ConsoleTraceListener"/> 
     <remove name="Default"/> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="CustomHttpBinding" maxReceivedMessageSize="2147483647"> 
      <readerQuotas maxStringContentLength="2147483647"/> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client/> 
    <services> 
     <service name="MyService.Data.Service" behaviorConfiguration="serviceBehavior"> 
     <clear/> 
     <endpoint address="JobsHttp" binding="basicHttpBinding" contract="MyService.Data.IWhereItSits" bindingConfiguration="CustomHttpBinding"></endpoint> 
     <endpoint binding="mexHttpBinding" name="httpmex" contract="IMetadataExchange"></endpoint> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://myspecialservice:9000/"/> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> 

EDIT 1

그래서 방화벽의 포트 9000을 여는 대신 service.exe 나 로컬 네트워크에서 서비스를 칠 수에 대한 규칙을 지정. 이제 나는 바깥 세상에서 봉사하기 위해 노력하고 있습니다. 내 라우터에 포트 9000에서 서버 자체로 트래픽을 밀어 넣을 규칙을 추가했지만 아무것도 얻지 못하고 있습니다.

EDIT 2

내가 네트워크는 웹 서버에 모니터링하고 내가 라우터가 서버 자체에 다시 트래픽을 전달하고 있는지 확인할 수 있습니다 설치했습니다. 그런 다음 서버는 응답을 다시 보내려고합니다.

EDIT 3

무엇이든지 나에게 아무 의미도하지 않습니다. 서버에는 2 개의 닉스가 있습니다. 라우터에서 서버로 1 개의 IP를 타겟팅했습니다. 나는 그것을 다른 IP로 바꾸었고 외부에서 설명이나 응답을 통해 작동합니까?

+0

서비스에 연결할 수있는 주소와 일치하도록 config 파일의 baseAddress를 변경하는 방법은 어떻습니까? –

+1

IIS-Express가 아닌 IIS를 사용하고 있습니까? (후자는 기본적으로 원격 연결을 허용하지 않습니다.) –

+0

IIS를 사용하여 수정하십시오. 내가 기본 주소를 변경하려고했는데 그것은 중요하지 않습니다. – meanbunny

답변

0

사용자가 편집 할 때 서버에 연결할 수 있다고하지만 192.168.1.230은 로컬 주소입니다. 로컬 네트워크 내에서만 유효합니다. 외부 세계에 대한 귀하의 주소는 다릅니다. :/


을 편집 IIS 듣고 무엇

? 어쩌면 당신은 당신의 바인딩 (IIS-> 귀하의 사이트 -> 마우스 오른쪽 버튼 클릭 -> 바인딩 편집) 다른 IP로만 설정할 수 있습니다. 그렇다면 IP 주소를 'All Unasigned'로 변경하면 서비스가 첫 번째 IP에도 응답해야합니다.

+0

그 이유는 다른 편집에서 라우터의 사용에 대해 이야기합니다 – meanbunny

+0

내가 이것을 확인하자 , 지금 나는이 통지를 보지 못했다. – meanbunny