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がOnAcceptChannelではなくOnBeginAcceptChannelを正常に呼び出そうとしたことを覚えているようです。

また、ServiceHost.Faultedイベントにハンドラーをアタッチしていますか?障害が発生している可能性があり、ホストを開いているときに必ずしも外部例外が発生するわけではありません。

于 2009-08-07T12:34:01.190 に答える