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에서 텔넷을 수행 할 수 있습니다.
서비스 쪽과 클라이언트 쪽 모두에서 WCF 추적을 켰습니다. 그러나, 나는 클라이언트 측에서만 로그 파일을 가지고있다. 내가 생각하는 이유는 클라이언트 쪽이 웹 호스트 앱에 있기 때문이지만 서비스 쪽은 데스크톱 앱에 있기 때문입니다. 누구든지 데스크톱 응용 프로그램에서 WCF 추적을 설정하는 방법을 알고 있습니까? 감사! – user1897157
내 대답의 링크에 대한 대답은 app.config에 필요한 모든 구성을 포함해야합니다. 웹 또는 데스크톱 응용 프로그램을 실행 중인지 여부에 관계없이 구성이 동일해야합니다. 파일을 쓰려고하는 위치에 액세스 할 수없는 사용자로 데스크톱 응용 프로그램을 실행하고 있습니까? 편집 : Wireshark 또는 Netmon과 같은 도구를 서버에 설치하여 앱 사이에 대화가 있음을 확인할 수도 있습니다. – Brad