httplistener의 사용을 피하기 위해 WebserviceHost를 변경할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/2417554

  •  19-09-2019
  •  | 
  •  

문제

Httplistener 클래스에 의존하지 않고 WCF 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 소켓으로 교체하는 가장 쉬운 방법은 무엇입니까?

도움이 되었습니까?

해결책

높은 수준의 프로토콜을 사용하여 "그대로", httplistener 또는 IIS가 뒷받침하지 않는 HTTPTRANSPORT 버전을 롤링 할 수 있습니다. 할 수 있지만 확실하지만 많은 일입니다. 기존의 httptransport 비트를 반사기로 분리하십시오. 거기에는 많은 움직이는 부분이 있습니다. https 또는 chunking과 같은 멋진 것이 필요하지 않으면 하루나 이틀 안에 소켓을 통해 간단한 POC를 해킹 할 수 있지만 견고하게 만드는 것은 까다로울 수 있습니다. 여기'많은 자원의 좋은 랩업 (지금은 약간 날짜가 될 수 있음).

다른 팁

귀하의 문제는 httplistener와 관련이 없습니다.

문제는 다음과 같습니다. * 서버 포트를 열려고하는 권한이 제한된 OneClick 응용 프로그램이 있습니다.

이것은 모순입니다. 신뢰할 수없는 제한된 권한 응용 프로그램은 서버 포트를 열지 않아야합니다. 이것이 정의 당 허용되지 않는 이유입니다.

일반 소켓 포트를 열었습니까? 작동하지 않아야합니다.

일반적으로 제한된 신뢰 최종 사용자 애플리케이션은 웹 서비스를 호스팅해서는 안됩니다.)

즉, 나는 운전자 커뮤니케이션 시나리오에서 WCF를 사용하려고 노력하는 비슷한 상황에 처해있었습니다. 하늘에 감사드립니다.

당신은 또한 충분히 찢어지는 것을 볼 수 있습니다 카시니 앱에서 호스팅 가능하고 (.SVC 파일 및 서비스 활성화 핸들러를 통해) WCF 파이프 라인을로드하려면 새 코드를 거의 쓰지 않아야하지만 여전히 강력하고 테스트 된 웹 서버를 제공합니다.

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