우리 응용 프로그램은 명명 된 파이프를 통해 WCF를 사용하여 두 프로세스간에 통신합니다 (두 프로세스 모두 Windows 서비스 없음). 우리 응용 프로그램은 몇 년 동안 아무런 문제없이 현장에서 실행되었습니다.타사 응용 프로그램이 WCF 응용 프로그램을 중단 함
이제 타사 응용 프로그램 (특히 Garmin Express)이 우리 회사를 침해한다는 신고가 접수되었습니다. Garmin Express를 집에 설치하고 동작을 확인했습니다. 특히 Garmin Core Update Service를 실행하면 응용 프로그램이 실패하게됩니다.
Garmin 서비스가 실행 중일 때 응용 프로그램의 "서비스"쪽이 시작되고 WCF 끝점을 만드는 데 문제가 없습니다. 그러나 클라이언트가 시작되어 서비스에 연결하려고하면 서비스가 실행되지 않는 것처럼 EndpointNotFoundException이 발생하여 실패합니다.
이 시점에서 필자는 문자 그대로 서비스 제어판에서 Garmin 서비스를 중단 한 다음 자체 서비스를 다시 시작하지 않고도 클라이언트를 성공적으로 다시 실행할 수 있습니다. Garmin 서비스를 다시 시작하면 클라이언트를 시작하려는 시도가 더 이상 실패합니다. 따라서 적어도 WCF 서비스가 계속 실행되고 Garmin 소프트웨어가 클라이언트의 연결 기능을 차단하고 있음을 증명합니다.
엔드 포인트 주소에 고유 한 이름을 사용하고 있습니다 (예 : "net.pipe : // localhost/MyPrivateApplication"). 이 주소를 다양한 다른 이름으로 변경하려고 시도했지만 문제에는 아무런 영향이 없습니다.
어떻게하면 다른 응용 프로그램을 실행해도 응용 프로그램의 WCF 사용 기능이 손상 될 수 있습니까?
업데이트 : 요청에 따라 서비스 측 코드 스 니펫이 있습니다. 문제를 격리하기 위해 원래 코드에서 코드를 단순화했습니다. 지금까지 한 가지 변화 만이 이슈에 영향을 미치지 않았습니다. 귀하의 질문에
MyService service = new MyService();
ServiceHost host = new ServiceHost(service);
string hostAddress = new Uri("net.pipe://localhost/MyWCFConnection");
host.AddServiceEndpoint(typeof(IMyService), new NetNamedPipeBinding(), hostAddress);
host.Open();
서비스가 서비스 URL을 어떻게 지정합니까? 기본 + 상대 주소 또는 부주의 한 주소입니까? 어쩌면 당신은 당신의 서비스 엔드 포인트가 어떻게 설정되어 있는지 보여주는 code/config의 추출물을 게시 할 수 있습니다. –
내 게시물을 코드 스 니펫으로 업데이트했습니다. 나는 이것이 절대 주소라고 확신한다, 맞습니까? 이 서비스 측 코드는 Garmin 서비스가 실행 중인지 여부에 관계없이 성공적으로 실행됩니다. 클라이언트 측만 영향을받습니다. – ObjetDart
네, 그 주소는 절대 주소입니다. 그래서 제 첫 제안보다 더 미묘한 일이 있습니다. –