2012-01-21 2 views
2

내 로컬 컴퓨터에 Windows 서비스로 호스팅되는 WCF 서비스가 있습니다. 'net.tcp : 지금은 (내 로컬 dev에 컴퓨터에 다시) 클라이언트에 서비스 참조를 추가하기 위해 노력하고있어하지만 오류net tcp wcf 서비스에 서비스 참조를 추가 할 수 없습니다.

메타 데이터를 얻고 해결할 수없는 참조를 포함// localhost : 8523/Service1 '입니다. net.tcp : // localhost : 8523/Service1에 연결할 수 없습니다. 연결 시도는 00 : 00 : 02.0011145 시간 지속되었습니다. TCP 오류 코드 10061 : 대상 컴퓨터가 적극적 내가 Windows 방화벽은 심지어 실행 8523을 허용하도록 Windows 방화벽에서 새 규칙을 만들어 포트 8523.을 차단하지 않음을 확인

을 거부했기 때문에 없음 연결 이 될 수있다 포트. 하지만 내가 실행 중일 때 netstat -sp tcp 포트 8523을 찾을 수없는 것 같습니다. Serice1 서비스의 상태가 서비스에서 START로 설정되어 있음을 볼 수 있습니다. 이것은 Windows 서비스 프로젝트의 설정 파일

서비스 라이브러리

<system.serviceModel> 
    <services> 
    <service name="WcfServiceLibrary1.Service1"> 
     <endpoint 
      address="" 
      binding="netTcpBinding" bindingConfiguration="" 
      contract="WcfServiceLibrary1.IService1"> 
     <identity> 
      <dns value="localhost" /> 
     </identity> 
     </endpoint> 
     <endpoint 
      address="mex" 
      binding="mexTcpBinding" bindingConfiguration="" 
      contract="IMetadataExchange" /> 
     <host> 
     <baseAddresses> 
      <add baseAddress="net.tcp://localhost:8523/Service1" /> 
     </baseAddresses> 
     </host> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name=""> 
     <serviceMetadata httpGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

구성에게 있습니다 동일 보인다.

+0

동일한 구성으로 서비스가 콘솔 응용 프로그램에서 호스팅되는 경우 예상대로 작동합니까? 이벤트 로그에서 Windows 서비스의 가능한 오류 메시지를 확인 했습니까? 또한 방화벽을 완전히 비활성화하여 문제가 발생하지 않도록 할 수 있습니다. – Clemens

+0

일단 서비스를 시작하면 오류로 다시 멈추지 않을 것입니다 (이벤트 로그가있는 클레멘스 제안을 보여줍니다). 서비스보기를 새로 고치면 다시 중지되었음을 나타냅니다. –

+0

@Clemens 이벤트 로그를 검사했지만 오류 메시지가 없습니다. 서비스가 성공적으로 시작되었다는 정보 만 나타납니다. Windows 방화벽을 완전히 비활성화했지만 불행히도 여전히 같은 오류가 발생합니다. – Michael

답변

4

마이클, 이것이 내가 일반적으로 WCF 서비스에 사용하는 바인딩 net.tcp이다.

<bindings> 
     <netTcpBinding> 
      <binding name="TcpBinding" 
        receiveTimeout="Infinite" 
        sendTimeout="Infinite" 
        maxBufferSize="2147483647" 
        maxReceivedMessageSize="2147483647"> 
       <reliableSession inactivityTimeout="Infinite"/> 
       <security mode="None"/> 
      </binding> 
     </netTcpBinding> 
    </bindings> 

봅니다 구성에 추가합니다 : 또한, 내 서비스가 ServiceAccount.LocalSystem에서 실행중인

<service name="WcfServiceLibrary1.Service1"> 
    <endpoint  
     address=""  
     binding="netTcpBinding" bindingConfiguration="TcpBinding" 
     contract="WcfServiceLibrary1.IService1"> 
    ... 

.

확인

에서 netstat - AP TCP

서비스가 수신 대기합니다.

EDIT : 내 서비스 클래스. Windows 서비스의 현재 디렉토리는 프로그래밍 방식으로 BaseDirectory, 즉 실행 파일의 디렉토리로 설정됩니다.

public class Service : ServiceBase 
{ 
    public static void Main() 
    { 
     Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); 
     ServiceBase.Run(new Service()); 
    } 

    ... 
} 
+0

늦게 응답을 드려 죄송합니다. Clemens와 마찬가지로 사용해 보았지만 여전히 서비스 용 클라이언트를 만들 수 없습니다. – Michael

+0

그리고 8523 포트에서 수신 대기하는 서비스가 있습니까? – Clemens

+0

Nope Clemens, thats 문제, 포트 8523이 실행되고있는 것 같아서 콘솔 응용 프로그램으로 Windows 서비스를 변경했습니다. 특히 콘솔 응용 프로그램이 서비스를 호스팅하고 있으며 예상대로 작동하지만 지금은 작동하지 않습니다. 그 이유는 - Windows 서비스와 콘솔 응용 프로그램 모두 동일한 dll의 서비스와 동일한 구성을 사용하기 때문입니다. 그렇다면 콘솔 응용 프로그램을 사용하여 서비스를 호스팅 할 수 있지만 Windows 서비스를 통해 호스팅 할 수없는 이유는 무엇입니까? 모든 단서? – Michael

1

동작을 지정했지만 이름을 지정하지 않았습니다. 행동에 이름을 부여하고 서비스의 behaviorConfiguration을 사용하여이를 가리 키십시오.

<service name="WcfServiceLibrary1.Service1" behaviorConfiguration="svc1behavior"> 

...

<serviceBehaviors> 
<behavior name="svc1behavior"> 
    <serviceMetadata httpGetEnabled="false" /> 
    <serviceDebug includeExceptionDetailInFaults="false" /> 
</behavior> 
</serviceBehaviors> 
+0

응답 해 주셔서 감사합니다. 문제가 해결되었지만 여전히 동일한 오류가 발생했습니다. – Michael

+1

.NET4를 사용하는 경우 동작 블록 이름 지정 필요 - 이름없는 동작 블록이 서비스의 기본 동작 구성 역할 수행 –

+0

.NET 4.6 프로젝트에서 저를 위해 일했습니다! – Doc

0

콘솔 응용 프로그램에서 서비스를 호스팅하는 동안 작동하는 경우 Net.Tcp 수신기 서비스가 실행 중인지 확인하십시오. 실행 중이어야합니다.

서비스가 사용하는 포트를 찾으려면,

  1. 작업 관리자를 열고
  2. 보기를 선택 -> 열 선택 -> PID를 확인 -> 확인
  3. 는 PID주의, 서비스 프로세스 이름을 찾습니다
  4. 명령 프롬프트에서 followind 명령을 실행 :
0

netstat -ano | findstr *PID* 같은 문제가 있었다. 만든 (이 재건의 해결책 후

<system.serviceModel> 
    <services> 
    <service name="serviceName" behaviorConfiguration="BasicServiceBehavior" > 
     <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicServiceBasicHttpBinding" contract="(I<nameofservice>)"/> 
    </service> 
    </services> 
</system.serviceModel> 

을 : 문제 해결의 많은 후 나는 서비스 프로젝트의 Web.config의 서비스에 대한 참조를 실종됐다 발견, 그래서 나는의 Web.config이 추가 인터페이스). 그런 다음 마침내 다른 프로젝트의 서비스 참조를 추가 할 수있었습니다.

관련 문제