【问题标题】:How to keep WCF Service Alive?如何让 WCF 服务保持活跃?
【发布时间】:2013-05-10 09:09:22
【问题描述】:

我有两个程序(一个 exe 和一个 dll 加载到另一个第三方 exe 的进程空间)使用本地计算机 wcf 服务(使用网络命名管道绑定)相互通信请求的情况。第三个主机 exe 开始托管该服务。这一切都很好(无论如何到目前为止......我仍在学习),但我必须考虑如果通道故障或服务超时会发生什么。检查和处理故障以及保持通道活动的最佳做法是什么?

在我的情况下,让应用程序保持打开或关闭由用户决定,我们确实有一些用户倾向于让它们在夜间、周末等时间保持打开状态……在我看来,这可能会打开故障或服务中断的可能性,我不知道如何恢复。任何帮助将不胜感激。

【问题讨论】:

    标签: wcf c#-4.0 service channel fault


    【解决方案1】:

    首先,为什么要让频道无限期地保持活跃?

    假设您正在连接到一个数据库,您希望在一天内从中读取数据。你会在早上创建数据库连接,然后在晚上关闭它吗?

    在 WCF 中为每个调用构建一个通道相对便宜,除非您知道您将在几秒钟内彼此进行多次调用,在这种情况下您应该重用该通道。

    编辑

    这篇文章解释了如何做到这一点。这非常复杂,在代码中为绑定设置一个巨大的超时值可能更容易(如帖子末尾所建议的那样):

    Do WCF Callbacks TimeOut

    编辑

    谷歌上有很多关于这个的东西:http://bit.ly/10ZPWE2

    【讨论】:

    • 在双工通道的情况下,如果它被关闭是否会阻止回调工作?
    • 是的,对于双工,您需要保持通道打开。不在 WCF 中使用双工通道的众多原因之一。
    • 就我而言,我别无选择...由于我目前的要求和环境,我基本上是在创建一个本土消息传递/请求服务来在 dll 和 exe 之间进行操作.那么……在 ServiceHost 和 Channel 之间……处理故障并使它们保持活动状态的最佳方法是什么?
    • 好的,我不知道是否存在故障和其他潜在的通信结束事件和/或问题,如果答案不仅仅是调整超时...例如,DuplexChannelFactory 对象有一个 Faulted事件。这是否值得监视...如果是,请使用中止和重置?此外,我所看到的大部分内容似乎都涉及渠道,但 ServiceHost 呢?那里有值得监控的事件吗?或者特殊的处理方式以确保服务和频道保持活力?我只是在想有人比他们自己先到过这里。
    • 不是我。我使用双工 wcf 调用构建了一个拍卖服务和客户端 - 如果任一通道出现故障,用户只需重新启动客户端,一切都很好。
    猜你喜欢
    • 2012-05-10
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多