현재 청취중인 TCP 소켓과 다른 소스에서 HTTP 요청을 가져 오는 사용자 지정 바인딩을 만들고 있습니다. 채널에 직접 액세스하여 열 때 아무런 문제가 없습니다. 그러나 WebServiceHost의 끝점에서 바인딩을 호스트하려고하면 문제가 발생합니다.WebServiceHost가 사용자 지정 ChannelListener의 OnAcceptChannel을 호출하지 않습니다.
내 맞춤 바인딩 코드의 모든 기능에 Console.WriteLine() 디버그 메시지를 삽입했습니다. 내 ChannelListener의 OnOpen() 함수가 호출 될 때까지 모든 것이 잘 작동합니다. 그런 다음 ServiceModel은 OnAcceptChannel() 메서드를 호출하기를 원하지 않습니다. 예외도없고 오류 메시지도 없습니다. 그것은 단지 거기에 걸려 있고 더 이상 제 바인딩의 다른 기능을 호출하지 않습니다. 아래 코드에 응용 프로그램의 출력을 주석으로 표시했습니다.
WebServiceHost host = new WebServiceHost(
typeof(MyService), new Uri("http://localhost:80"));
host.AddServiceEndpoint(typeof(MyService), new MyWebHttpBinding(), "");
// BINDING CONSTRUCTOR
// BINDINGELEMENT CONSTRUCTOR
host.Open();
// BINDING: CreateBindingElements (multiple times)
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: CanBuildChannelListener
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: CanBuildChannelListener
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDINGELEMENT: BuildChannelListener
// CHANNELLISTENER CONSTRUCTOR
// BINDINGELEMENT: Clone
// BINDINGELEMENT CONSTRUCTOR
// BINDING: CreateBindingElements (multiple times)
// CHANNELLISTENER: OnOpen
// CHANNELLISTENER: OnOpen END (function completes properly. last output)
내 응용 프로그램에서 OnAcceptChannel 메서드가 올바르게 호출되면 무엇을 변경해야 하는지를 아는 사람이 있습니까?
건배
WebServiceHost는 REST 스타일 요청에 사용됩니다 .... 아마도 그게 문제입니까? 대신에 정규 ServiceHost 클래스를 사용한다면 어떨까요? –
원본 WebHttpBinding과 같이 REST 스타일 요청에 바인딩 [i]을 사용해야합니다. 그러나 WebServiceHost를 ServiceHost로 변경해도 문제가 해결되지 않습니다. 출력은 정확히 동일합니다. – Etan