0

我目前正在构建一个自定义绑定,该绑定从不同于侦听 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 方法被正确调用吗?

干杯

4

1 回答 1

1

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

此外,您是否将处理程序附加到 ServiceHost.Faulted 事件?可能是它出错了,在主机打开期间您不一定会遇到外部异常。

于 2009-08-07T12:34:01.190 回答