私はこのトピックに関して半分答えられたままになっているいくつかの質問を見てきました。NetTcpBindingを使用する自己ホスト型WCFアプリケーションに要求を送信したいと思います。問題は、ソケットを使用する必要があるということです。
TcpListener(ChannelListener OnOpen上)を開くトランスポートバインディング要素を作成しました。これは正常に機能しますが、その場合は、独自のメッセージフレーミングモデルを使用する必要があります。
明らかに、net.tcpメッセージフレーミングモデルを実装するつもりはありません(http://msdn.microsoft.com/en-us/library/ff470920%28v=prot.10%29.aspx)
私は私を示唆するいくつかの投稿( http://blogs.msdn.com/b/carlosfigueira/archive/2008/01/13/writing-custom-requests-to-simple-wcf-services.aspxを含む)を読みましたリクエストを送信し、MessageEncoder/MessageInspectorを介して送信されたバイトを解釈する必要があります。
このようにして、基本的に、メソッド/操作ごとにメッセージを作成できます(リクエストごとに小さな変更を加えます)
このメソッドを試しましたが、(ChannelFactoryからの)WCFチャネルを使用したときに、(カスタムMessageEncoderを使用して)問題のバイトを取得しました。
私はそれらのバイトを保存し、TcpClientを介して送信しました-MessageEncoderは起動しませんでした。
通常のチャンネルを開くと:
ChannelFactory<ITestService> factory = new ChannelFactory<ITestService>(new NetTcpBinding(),
"net.tcp://localhost:76599");
factory.CreateChannel().DoSomething(string.Empty); //gets to MessageEncoder
ソケットを介して同じことを試してみると:
TcpClient cli = new TcpClient("localhost", 76599);
byte[] fileArray = File.ReadAllBytes("c:\\fileFromMessageEncoder.bin");
cli.GetStream().Write(fileArray, 0, fileArray.Length); // Does not get to MessageEncoder
何か案は?