WebServiceHost не вызывает OnAcceptChannel пользовательского ChannelListener - PullRequest
0 голосов
/ 07 августа 2009

В настоящее время я создаю пользовательскую привязку, которая получает HTTP-запросы из другого источника, чем из прослушивающего сокета TCP. Когда я получаю доступ и открываю канал напрямую, проблем нет. Однако возникают проблемы при попытке разместить привязку в конечной точке WebServiceHost.

Я вставил сообщения отладки Console.WriteLine () в каждую функцию кода моей пользовательской привязки. Все работает нормально до тех пор, пока не будет вызвана функция OnOpen () моего ChannelListener. После этого 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 вызывался правильно?

Приветствия

1 Ответ

1 голос
/ 07 августа 2009

Вы регистрируете вызовы в асинхронной версии методов ChannelListener? Кажется, я помню, как ServiceHost пытался нормально вызывать OnBeginAcceptChannel вместо OnAcceptChannel.

Кроме того, вы присоединяете обработчик к событию ServiceHost.Faults? Возможно, это ошибка, и вы не обязательно получите внешнее исключение при открытии хоста.

...