ASAP初始化WCF双工nettcp通道

时间:2012-01-28 22:20:21

标签: wcf durable-duplex

在我的客户端/服务器应用程序中,我希望单个双工WCF通道可用于与其服务器进行通信 - 这种背景连接对于客户端应用程序运行并不是绝对必要的,但是对于报告状态是可取的到服务器。我分别在Ping()Echo()进行了IServerContract来电和IClientContract回调。

我使用pass-thru方法将class ServerProxy : System.ServiceModel.DuplexClientBase<IServerContract>实现为base.InnerChannel

如果我在我的客户端创建var proxy = new ServerProxy(...),我就可以开始调用proxy.Ping(),WCF将自动打开第一个呼叫的连接并立即执行操作呼叫。但是,由于通道初始化和身份验证,第一次调用总是需要约10秒。 (我正在使用Windows身份验证,基于消息的安全性,EncryptAndSign。)后续调用更快。

我相信这10秒是不可避免的,但是在客户端第一次调用服务器之前通常会有一段时间,在此期间可能会发生此初始化。因此,我不是等待DuplexClientBase的自动打开功能,而是通过调用proxy.InnerDuplexChannel.Open()提前打开频道。 (proxy.Open() throws an exception这种间接似乎可以避免它。)

不幸的是,验证客户端到服务器通道也验证服务器到客户端的回调通道。相反,服务器对客户端的第一次调用需要大约10秒。由于我使用的是netTcp绑定,我对此感到惊讶,但我认为现在可以预料到它。

如何以抢先的方式打开回调频道?

我可以要求客户端调用一些Login()方法,但我不相信WCF在用户代码可以知道连接的客户端之前应该严格要求操作!

提示(?):我想这个代码必须放在WCF管道/生命周期中的某个位置,服务器有机会在客户端连接的事件上执行自定义操作(并且在发送任何操作消息之前)。到目前为止,这个整合点一直困扰着我。

0 个答案:

没有答案