現在、リッスンしている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クラスを使用するとどうなりますか? –
バインディング[i]は元のWebHttpBindingのようなRESTスタイル要求に使用する必要があります。 ただし、WebServiceHostをServiceHostに変更しても問題は解決されません。出力はまったく同じです。 – Etan