2013-04-13 1 views
0

2 개의 WCF 끝점을 만들었습니다. 서비스 끝점은 데스크톱 응용 프로그램 (IP 주소 10.8.20.175)에 있습니다. 클라이언트 엔드 포인트는 웹 호스팅 응용 프로그램에 상주합니다.WCF 끝점 배포 오류

이 서비스 엔드 포인트 설정

<services> 
    <service behaviorConfiguration="NotificationServiceBehavior" 
    name="NotificationService"> 
    <endpoint address="" binding="netTcpBinding" contract="INotificationService" /> 
    <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost:3337/NotificationService" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

이며,이 엔드 포인트 주소, 내가 서비스 엔드 포인트의 실제 IP 주소를 넣어 클라이언트 엔드 포인트 설정

<system.serviceModel> 
<client> 
    <endpoint address="net.tcp://10.8.20.175:3337/NotificationService" 
    binding="netTcpBinding" contract="INotificationService" 
    name="NetTcpBinding_INotificationService" /> 
</client> 
<bindings> 
    <netTcpBinding> 
    <binding sendTimeout="00:10:00" maxReceivedMessageSize="1000000" name="NetTcpBinding_INotificationService"/> 
    </netTcpBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

통지합니다. 로컬 호스트에서 서비스 엔드 포인트와 클라이언트 엔드 포인트 간의 통신을 테스트했을 때 해당 주소는 localhost : 3337이었고 통신은 양호했습니다. 이제 끝점을 배포 할 때 다음 오류가 발생했습니다.

소켓 연결이 중단되었습니다. 메시지를 처리하는 중 오류가 발생하거나 원격 호스트 인 또는 기본 네트워크 리소스 문제가 수신 시간 초과를 초과하여 오류가 발생할 수 있습니다. 로컬 소켓 타임 아웃은 '00 : 10 : 00 '입니다.

System.Net.Sockets.SocketException : 기존 연결이 System.Net.Sockets.Socket.Receive (Byte [] 버퍼, Int32 오프셋, Int32 크기, SocketFlags socketFlags)에서 원격 호스트에 의해 강제로 닫혔습니다.

로그에 원격 호스트에서 연결이 강제로 닫혔다 고 표시됩니다. 즉, 클라이언트 끝 점이 실제로 전송되었음을 의미합니다. ServiceModel.Channels.SocketConnection.ReadCore (Byte [] buffer, Int32 offset, Int32 size, TimeSpan timeout, Boolean closing) 요청하고 서비스 끝점에 도달 했습니까? 나는이 시점에서 혼란 스럽다. 클라이언트 엔드 포인트가 서비스 엔드 포인트에 도달 할 수 있는지 확실하지 않습니다.

btw, 클라이언트 엔드 포인트 시스템에서 서비스 엔드 포인트 시스템에 ping을 수행 할 수 있으며 또한 원격 시스템의 포트 3337에서 텔넷을 수행 할 수 있습니다.

답변

0

본인의 경험에 의하면 귀하의 서비스에 클라이언트가 도달하여 활성화되었음을 나타냅니다. 그러나 서비스에서 응답을 죽인 통화 중에 뭔가가 발생했습니다.

가장 좋은 방법은 WCF tracing을 확인하는 것입니다. 이렇게하면 서버 측에서 일어나는 일에 대해 더 잘 파악할 수 있습니다.

+0

서비스 쪽과 클라이언트 쪽 모두에서 WCF 추적을 켰습니다. 그러나, 나는 클라이언트 측에서만 로그 파일을 가지고있다. 내가 생각하는 이유는 클라이언트 쪽이 웹 호스트 앱에 있기 때문이지만 서비스 쪽은 데스크톱 앱에 있기 때문입니다. 누구든지 데스크톱 응용 프로그램에서 WCF 추적을 설정하는 방법을 알고 있습니까? 감사! – user1897157

+0

내 대답의 링크에 대한 대답은 app.config에 필요한 모든 구성을 포함해야합니다. 웹 또는 데스크톱 응용 프로그램을 실행 중인지 여부에 관계없이 구성이 동일해야합니다. 파일을 쓰려고하는 위치에 액세스 할 수없는 사용자로 데스크톱 응용 프로그램을 실행하고 있습니까? 편집 : Wireshark 또는 Netmon과 같은 도구를 서버에 설치하여 앱 사이에 대화가 있음을 확인할 수도 있습니다. – Brad