我已经看到一些关于这个主题的问题没有得到回答。我想向使用 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 发送的字节。
这样,我基本上可以为我的每个方法/操作创建一条消息(每个请求都有微小的更改)
我尝试了这种方法,当我使用 WCF 通道(来自 ChannelFactory)时,我得到了有问题的字节(通过使用自定义 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
有任何想法吗?