HttpListener 클래스에 의존하지 않고 WCF WebServiceHost를 사용하는 방법을 찾고 있는데 권한 관련 문제가 있습니다 (자세한 내용은 this question 참조).HttpListener를 사용하지 않도록 WebServiceHost를 변경할 수 있습니까?
저는 REST API를 통해 다른 (타사) 응용 프로그램과 로컬로 통신하는 응용 프로그램을 작성하고 있습니다.
현재 우리는 WCF를 임베디드 HTTP 서버로 사용하고 있습니다. 다음과 같이 WebServiceHost를 만듭니다.
String hostPath = "http://localhost:" + portNo;
WebServiceHost host = new WebServiceHost(typeof(IntegrationService), new Uri(hostPath));
// create a webhttpbinding for rest/pox and enable cookie support for session management
WebHttpBinding webHttpBinding = new WebHttpBinding();
webHttpBinding.AllowCookies = true;
ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IIntegrationService), webHttpBinding, "");
host.Open()
ChannelFactory<IIntegrationService> cf = new ChannelFactory<IIntegrationService>(webHttpBinding, hostPath);
IIntegrationService channel = cf.CreateChannel();
응용 프로그램이 관리자 권한으로 실행되는 동안 모든 것이 잘 작동합니다. 관리 권한이없는 시스템에서 응용 프로그램을 실행하면 host.Open()은 ErrorCode == 5 (ERROR_ACCESS_DENIED) 인 HttpListenerException을 발생시킵니다.
우리는 명령 줄에서 httpcfg.exe를 실행하여 문제를 해결할 수 있지만 이는 원 클릭 데스크톱 응용 프로그램이며 실제로는 장기적인 해결책이 아닙니다.
우리는 WCF를 도려내고 우리 자신의 HTTP 서버를 작성할 수 있지만 가능한 경우이를 피하고 싶습니다.
WCF가 제공하는 나머지 모든 HTTP 스캐 폴딩을 사용하면서 HttpListener를 표준 TCP 소켓으로 대체하는 가장 쉬운 방법은 무엇입니까?
ErrorCode == 5 (ERROR_ACCESS_DENIED) : "netsh http urlacl"은 HTTP Listener의 예비 주소에 대한 액세스 권한을 부여하는 방법입니다. –