【问题标题】:stopping user requests to wcf services停止用户对 wcf 服务的请求
【发布时间】:2011-06-29 10:28:51
【问题描述】:

我正在开发一个 3 层、基于 win 表单的应用程序,其中 WCF 作为我们的服务层。我们有大约 8 到 10 个 WCF 服务(托管在 Windows 服务中)用于各种目的。我们有一个要求,管理员应该能够锁定用户进行任何操作,然后应该能够释放锁定。基本上,目的是对服务或数据库进行任何维护和更新。一种选择是关闭服务。但是我们也有服务无法停止但我们仍然不能允许任何请求处理的情况。

我想知道,在 WCF 中是否有一种方法或 API,我们可以阻止服务接受任何请求但仍继续运行。

我正在查看 wcf 通道级别的内容,以阻止对服务的请求,这可以像管理 UI 中的 API 一样进行控制,而不是更改每个服务或方法。希望它能让它更清楚一点。

谢谢, 玛尼

【问题讨论】:

    标签: c# .net wcf


    【解决方案1】:

    您可以让您的服务公开一个管理端点,您可以向该端点发送暂停/恢复消息。

    或者,您可以设置一个集中式服务,例如 AuthorizationService,并让您的 Windows 服务在每次调用时调用 AuthorizationService,以确保它被允许。然后,该服务可以根据用户凭据、一天中的时间、管理员的心情或任何它想要的东西来决定是否授予呼叫。我不确定第二种情况是否适用于您的特定情况。

    【讨论】:

    • 据我了解,在这两个选项中,我应该更改每个服务中的每个操作方法,以检查状态,然后相应地继续或不继续。恐怕我目前无法做到这一点,因为我们有大约 10 个或更多的服务和 100 种方法。您的第一个选项似乎让我思考,但不确定如何通过此端点控制服务的其他端点。
    • 您可以在这两种方法中使用消息拦截来允许或禁止操作。您可以通过msdn.microsoft.com/en-us/library/ms751495.aspx了解更多信息。
    【解决方案2】:

    阻止“任何请求”并未完全运行。如果您的意思是某种只读模式,您的应用服务会查询但不会更改,那么您必须自己编写代码。您可能可以通过 WCF 扩展做一些花哨的事情,但我不确定我是否会亲自打扰 - 我只是在所有开始时检查“是否设置了管理员标志” “做”的方法。如果这是您的意图,或者可能是所有方法。

    你会返回一个已知的错误/异常,调用者可能(或可能不会)优雅地处理。如果方法的数量很重要,那么可以肯定 - 查看 WCF 扩展点。我在想一个“操作行为”,虽然有many extension points

    【讨论】:

    • 我不是说只读模式。我希望服务能够运行,但是在管理员锁定服务之后,当任何进一步的客户端尝试访问该服务时,它应该抛出一个错误或者可能表明该服务处于锁定状态。希望清楚。
    • @Mani - 大概是扩展点;特别是调用者。但是没有 - 没有内置任何东西。
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多