我的应用程序运行具有 2 个不同绑定(每个具有不同接口)的 WCF 服务主机。在某些情况下,我想禁用 1 绑定,以便尝试连接到此接口/端口/绑定名称(无论如何)的客户端不会在那里找到任何东西。
这可能吗,怎么做?
我的应用程序运行具有 2 个不同绑定(每个具有不同接口)的 WCF 服务主机。在某些情况下,我想禁用 1 绑定,以便尝试连接到此接口/端口/绑定名称(无论如何)的客户端不会在那里找到任何东西。
这可能吗,怎么做?
继续Dhawalk所说的,您可以抽象出您的业务层,并使用依赖注入,注入具有“不可用”和“功能”实现的服务处理程序。不可用的实现可能只是抛出异常或总是返回错误。
你将不得不装备你的 BL,并使用 WCF 检查员来回弹 unlicensesd 呼叫。检查员请参考以下链接
如果两个服务合同都在同一个服务类上,除了在每个方法的开头添加一个检查“如果我启用......”之外,我看不出你会如何轻松地禁用它。
也许您可以以编程方式查看服务主机的操作合同,有可能一次删除它们。不过,可能必须暂时关闭服务主机才能进行更改。我以这种方式将方法添加到服务合同中,这些方法从未存在于与真实服务类相同的类/接口上,甚至不在同一个程序集中,但我不记得 servicehost 是否已经启动当时。
您需要查看端点:
ServiceHost.Description.Endpoints
并选择需要编辑的端点,然后查看
Endpoint.Contract.Operations
以确定要添加/删除的方法。它们将从 WSDL 中消失。
编辑刚刚尝试过,它似乎在运行时工作,但我可以想象重新添加 OperationContracts 会更难(除非你在删除它们之前保存它们......让我知道你是如何开始的,这听起来很有趣!)