WebServiceHost不会调用自定义ChannelListener的OnAcceptChannel

时间:2009-08-07 09:30:17

标签: wcf wcf-binding extensibility

我目前正在构建一个自定义绑定,它从不同的源获取来自侦听TCP套接字的HTTP请求。 当我直接访问并打开一个频道时,没有问题。 但是,当我尝试在WebServiceHost的端点中托管我的绑定时会出现问题。

我已将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方法被正确调用吗?

干杯

1 个答案:

答案 0 :(得分:1)

您是否正在记录对ChannelListener方法的异步版本的调用?我似乎记得ServiceHost试图正常调用OnBeginAcceptChannel而不是OnAcceptChannel。

另外,您是否将处理程序附加到ServiceHost.Faulted事件?它可能是故障,你不一定会在主机开放期间得到外部异常。