문제

클라이언트 간 작업을 예약하기 위해 여러 클라이언트가 포함된 WCF 서비스가 있습니다.XP에서는 훌륭하게 작동했습니다.win7로 이동하면 동일한 시스템의 서버에만 클라이언트를 연결할 수 있습니다.이 시점에서 IPv6와 관련이 있다고 생각하는데 어떻게 진행해야 할지 막막합니다.

원격 서버에 연결을 시도하는 클라이언트에서 다음 예외가 발생합니다.

System.ServiceModel.EndpointNotFoundException:net.tcp://10.7.11.14:18297/zetec/Service/SchedulerService/Scheduler에 연결할 수 없습니다.연결 시도는 00:00:21.0042014의 시간 동안 지속되었습니다.TCP 오류 코드 10060:연결된 당사자가 일정 시간 후에 제대로 응답하지 않아 연결 시도가 실패했거나, 연결된 호스트가 10.7.11.14:18297에 응답하지 않아 연결 설정에 실패했습니다.---> System.Net.Sockets.SocketException:일정 시간 이후 연결된 당사자가 제대로 응답하지 않아 연결 시도가 실패했거나, 연결된 호스트가 응답하지 않아 연결 설정에 실패했습니다. 10.7.11.14:18297

서비스는 다음과 같이 구성됩니다.

<system.serviceModel>
  <services>
     <service
         name="SchedulerService"
         behaviorConfiguration="SchedulerServiceBehavior">
        <host>
           <baseAddresses>
              <add baseAddress="net.tcp://localhost/zetec/Service/SchedulerService"/>
           </baseAddresses>
        </host>
        <endpoint address="net.tcp://localhost:18297/zetec/Service/SchedulerService/Scheduler"
                  binding="netTcpBinding"
                  bindingConfiguration = "ConfigBindingNetTcp"
                  contract="IScheduler" />
        <endpoint address="net.tcp://localhost:18297/zetec/Service/SchedulerService/Scheduler"
                  binding="netTcpBinding"
                  bindingConfiguration = "ConfigBindingNetTcp"
                  contract="IProcessingNodeControl" />
     </service>
  </services>
  <bindings>
     <netTcpBinding>
        <binding name = "ConfigBindingNetTcp" portSharingEnabled="True">
           <security mode="None"/>
        </binding>
     </netTcpBinding >
  </bindings>

  <behaviors>
     <serviceBehaviors>
        <behavior name="SchedulerServiceBehavior">
           <serviceDebug includeExceptionDetailInFaults="true" />
           <serviceThrottling maxConcurrentSessions="100"/>
        </behavior>
     </serviceBehaviors>
  </behaviors>
</system.serviceModel>

클라이언트는 다음과 같이 연결합니다.

String endPoint = "net.tcp://" + GetIPV4Address(m_SchedulerHostAddress) + ":" + m_SchedulerHostPort.ToString(CultureInfo.InvariantCulture) + "/zetec/Service/SchedulerService/Scheduler";

NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;

m_Channel = new DuplexChannelFactory<IProcessingNodeControl>(this, binding, endPoint);
m_IProcessingNodeControl = m_Channel.CreateChannel();

방화벽을 수십 번 정도 확인했지만 제가 놓친 부분이 있을 수도 있을 것 같습니다.Windows 방화벽을 비활성화해 보았습니다.ipv6를 멀리하기 위해 localhost를 ipv4 주소로 변경하려고 시도했으며 ipv6 방지 코드를 제거하려고 시도했습니다.

그것이 어떤 의미인지는 모르지만:

마이크로소프트 텔넷> 오픈 10.7.11.14 18297
10.7.11.14에 연결하는 중...포트 18297에서 호스트에 대한 연결을 열 수 없습니다.연결 실패

불행하게도 텔넷 테스트는 핵심이 아닌 것 같습니다.서비스가 실행 중일 때 localhost 및 원격 컴퓨터에서 내 서비스 포트에 성공적으로 연결했지만 내 클라이언트가 원격 컴퓨터에서 작동하지 않았습니다.

localhost에 대한 연결이 항상 보장되는 것은 아닌 것 같습니다.데스크톱(win7/32)은 작동하지만 노트북(win7/64)은 작동하지 않습니다.하지만 다른 win7/64 상자도 작동합니다.아마도 노트북에 여러 개의 NIC가 있기 때문일까요?또한 테스터 시스템의 연결 실패에 대해서도 설명하지 않습니다.

IPv6가 완전히 비활성화된 두 대의 win7 시스템을 설정했습니다(다음과 같이 0xffffffff 사용). http://support.microsoft.com/kb/929852 ).도움이 되지 않습니다.

도움이 되었습니까?

해결책 2

돌아가서 Ligos로부터받은 도움의 조합인지 여부를 테스트 할 시간이 없지만 기본 수정은 Windows 방화벽의 예외에 smsvchost.exe를 추가하는 것으로 보입니다.

도움을 주셔서 감사합니다, Ligos. 당신이 내 질문에 대답 할 때까지 포기할 준비가되었습니다.

Windows 방화벽에 net.tcp 추가에 대한 지침 :

  1. 서비스로 이동하여 Net.TCP 포트 공유 서비스를 찾은 다음 두 번 클릭하십시오. 실행 파일로가는 경로를 스 와이프하십시오 (화면에 전부가 아닌 경우 걱정하지 마십시오. 스 와이프 작업이 스크롤해야합니다).
  2. 방화벽으로 이동하여 Windows 방화벽을 통해 통신 할 수 있도록 새로운 프로그램을 추가하십시오. 서비스의 길에 붙여 넣고 OK를 누르십시오.

다른 팁

호스트 기본 주소와 끝점 주소가 잘못된 것 같습니다.하나는 명시적인 포트 참조를 갖고 있고 다른 하나는 그렇지 않습니다.일반적으로 기본 주소를 사용할 때는 엔드포인트 주소에 상대 URL을 사용합니다.

오류 메시지에 IPv6 주소가 언급되어 있지 않기 때문에 이것이 IPv6과 관련된 이유를 생각할 수 없습니다.

net.tcp 포트 공유 옵션을 비활성화한 후 다시 시도해 보세요.포트 공유 없이도 이전처럼 텔넷을 사용하여 연결을 확인할 수 있습니다.

또한 귀하의 서비스는 Win7에서 어떻게 호스팅됩니까?IIS7에서 또는 Windows 서비스에서 자체 호스팅됩니까?서비스에서 호스팅하려면 방화벽에서 포트를 여는 것 외에 exe에 일부 권한을 부여해야 할 수도 있습니다(Win XP에서 HTTP로 Windows 서비스를 호스팅하기 위해 수행해야 하는 경우도 있음).

죄송합니다. 너무 바빠서 해당 URL을 찾을 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top