2011-06-29 75 views
1

我正在使用WCF作为服务层的3层赢基于窗体的应用程序。我们有大约8到10个WCF服务(托管在Windows服务中)用于不同目的。我们有一个要求,管理员应该能够锁定用户进行任何操作,然后应该能够释放锁定。基本上,其目的是对服务或数据库进行任何维护和更新。一种选择是关闭服务。但是我们也有这样的场景,服务不能停止,但我们仍然不能允许任何请求处理。停止向wcf服务发送用户请求

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

我正在看wcf通道级别的某些东西,以阻止请求转到服务,这可以像管理UI中的API一样控制,而不是更改每个服务或方法。希望它能让它更清晰一些。

感谢, 玛尼

回答

0

阻止 “任何请求” 是不完全运行。如果您的意思是某种只读模式,即您的应用服务查询但不更改,则必须自行编码。你可能可能能够通过WCF扩展来做一些奇特的事情,但我不确定我是否会自己打扰 - 我只是在所有“正在执行”方法的开始时检查“是管理标志集”。或者如果这是你的意图,可能所有的方法。

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

+0

我不是指只读模式。我希望这些服务能够运行,但在管理员锁定服务之后,当任何其他客户端尝试访问该服务时,它应该抛出一个错误或者可能表明该服务处于锁定状态。希望它是明确的。 –

+0

@Mani - 那么推测是扩展点;特别是调用者。但没有 - 没有内置任何内容。 –

1

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

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

+0

在两个选项中,据我所知,我应该更改每个服务中的每个运算方法,以检查状态,然后相应地继续或不进行。我担心,目前我无法做到这一点,因为我们有大约10个以上的服务和100多种方法。你的第一个选择似乎让我思考,但我不知道如何通过这个终点控制服务的其他端点。 –

+0

您可以在两种方法中使用消息拦截来允许或禁止操作。你可以在http://msdn.microsoft.com/en-us/library/ms751495.aspx找到更多关于它的信息。 –