2

想象一下情况(这是真实情况):

笔记本电脑上有一个 WCF 客户端应用程序。笔记本电脑通过 WiFi 连接到互联网。用户在连接到 WCF 服务的工作时在他的笔记本电脑上做一些事情(请求回复操作)。

然后用户的笔记本电脑进入睡眠状态,用户回家。在家用户唤醒他的笔记本电脑,连接 HSPDA/3G 调制解调器(不同的接口和 ip)并希望继续在客户端应用程序中工作。请注意,应用程序尚未关闭。

用户(客户端应用程序)应经过身份验证,如果可能,应加密通信。

最佳实践是什么?为每个操作创建新代理?使用身份验证初始化 net.tcp 连接时,这应该很慢。

解决方案 basicHttp 连接 (+HTTPS) 与 InstanceContextMode.PerCall 吗?请注意,速度和更高的有效载荷是问题。

或者最好的解决方案是类似“wrapper(Func<>)”的东西,它包含 while 循环,直到操作成功完成(失败时,创建新连接并再次调用函数)。

谢谢你的建议

4

1 回答 1

0

只要工作单元是必要的,我就一直保持连接打开。基本上,连接仅在应用程序执行某些处理时才打开且可用(并且这些进程需要 WCF 连接)。保持重新连接可能会产生更多开销(并且取决于连接速度,它可能会增加延迟),但在连接工作时它也更安全(故障概率最小),我通常会将这些资源保存给其他人目的。

但是,这一切都取决于应用程序的功能;如果客户端是哑的并且服务正在完成所有工作,那么保持连接可能是有意义的,因为每个函数都在服务上执行一个方法。虽然随之而来的是一些故障检查和重新建立,如果连接被意外切断。

Also, netTcp is going to be a lot faster than wsHttp. And I personally haven't see a lot of latency on establishing a netTcp connection (though I don't know what kind of authentication you're doing [mine has generally implemented windows authentication])

于 2012-10-18T13:09:59.740 回答